注册 登录
编程论坛 VFP论坛

VFP 如何依次读出文件夹中(文件夹下有几十万个上百万个文件)每个文件

wangjianhai 发布于 2022-09-14 13:29, 1468 次点击
设备机器指定文件夹中有几十万到百万个文本文件
利用VFP 如何依次读出文件夹中每个文件 adir()函数超过1万多文件就报错了 ,请教各位高手指点!
5 回复
#2
吹水佬2022-09-14 14:58
adir()的数组超载了
#3
sych2022-09-14 15:59
百万个?win也崩吧
LPARAMETERS lcpath
DECLARE INTEGER FindFirstFile IN kernel32 STRING lpFileName,STRING @ lpFindFileData
DECLARE INTEGER FindNextFile IN kernel32 INTEGER hFindFile,STRING @ lpFindFileData
DECLARE INTEGER FindClose IN kernel32 INTEGER hFindFile
local cFilename,cFindBuffer,hFind,lnAttr,hCountF,hCountD,nRecn
lcPath=ADDBS(ALLTRIM(lcpath))
IF DIRECTORY(lcpath)
    cFindBuffer = Repli(Chr(0),318)
    hCountD=1
    LOCAL hDIRECT(1)
    hDIRECT[1]=""
    hCountF=0
    nRecn=0
    DO WHIL nRecn<hCountD
        nRecn=nRecn+1
        hFind = FindFirstFile(lcpath+hDIRECT(nRecn) + "*.*", @cFindBuffer)
        IF hFind = -1
            loop
        ELSE
            lnAttr = ctobin(SUBSTR(cFindBuffer, 1,4),'4rs')
            cFilename = SUBSTR(cFindBuffer, 45,260)
            cFilename = Left(cFilename, AT(Chr(0),cFilename)-1)
        ENDIF
        DO WHILE .T.
            IF BITand(lnAttr,16) =16
                IF Not (LEFT(cFilename,1)="."  or AT('RECYCLER',UPPER(cfilename))>0)
                    hCountD=hCountD+1
                    local hDIRECT[hCountD]
                    hDIRECT[hCountD]=hDIRECT(nRecn)+cFilename+'\'
                ENDIF
            ELSE
*                ?hDIRECT(nRecn)+cFilename
            ENDIF
            IF FindNextFile(hFind, @cFindBuffer) = 0
                EXIT
            ELSE
                lnAttr = ctobin(SUBSTR(cFindBuffer, 1,4),'4rs')
                cFilename = SUBSTR(cFindBuffer, 45,260)
                cFilename = Left(cFilename, AT(Chr(0),cFilename)-1)
            ENDIF
        ENDDO
        FindClose(hFind)
    ENDDO
else
    hCountD=0
    hCountF=1
    local hFile[1]
    hFile[1]=lcpath
endif
RETURN
#4
zhken2022-09-14 22:02
杀鸡焉牛刀,WINDOWS 自带的DIR 输出到文件,再导入DBF表 就很好用,对于有特殊字符的 其它方式容易丢失或被忽略
#5
zhken2022-09-14 22:12
RUN dir /B /s c:\*.* > temp.txt   枚举 目录及文件名,还有好多参数,可以查看一下
#6
hu9jj2022-09-15 09:10
化整为零就容易处理了。
1