| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6058 人关注过本帖, 1 人收藏
标题:遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 7楼 mywisdom88
试了一下,WIN10的windows文件夹拒绝访问(GetLastError()返回5)
可能是有权限的。
2018-07-24 19:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:2 
如果只是查找指定文件用不着这么麻烦

坚守VFP最后的阵地
2018-07-24 21:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
改了一下,处理异常情况。
DECLARE LONG FindFirstFile IN Kernel32 STRING@, STRING@
DECLARE LONG FindNextFile IN Kernel32 LONG, STRING@
DECLARE LONG FindClose IN Kernel32 LONG
DECLARE LONG GetLastError IN Kernel32
cPath = "D:\" &&GETDIR()
IF EMPTY(cPath)
    RETURN
ENDIF
DIMENSION arrDIR[1], arrFile[1], arrError[1]
arrDIR[1] = cPath
stFD = SPACE(320)
nCountD = 1
nCountF = 0
nCountE = 0
FOR EACH cPath IN arrDIR
    hf = FindFirstFile(cPath+"*.*", @stFD)
    IF hf == -1
        nCountE = nCountE + 1
        DIMENSION arrError[nCountE]
        arrError[nCountE] = "Error:"+TRANSFORM(GetLastError())+ "  "+cPath
        LOOP
    ENDIF
    DO WHILE .T.
        nFileAttr = CTOBIN(SUBSTR(stFD,1,4),"4RS")
        cFileName = SUBSTR(stFD,45,260)
        cFileName = LEFT(cFileName, AT(0h00,cFileName)-1)
        IF BITAND(nFileAttr,0x10) != 0    &&目录
            IF !(cFileName==".") AND !(cFileName=="..")
                nCountD = nCountD + 1
                DIMENSION arrDIR[nCountD]
                arrDIR[nCountD] = cPath + cFileName + "\"
            ENDIF
        ELSE    &&文件
            nCountF = nCountF + 1
            DIMENSION arrFile[nCountF]
            arrFile[nCountF] = cPath + cFileName
        ENDIF
        IF FindNextFile(hf, @stFD) == 0
            EXIT
        ENDIF
    ENDDO
    FindClose(hf)
ENDFOR
? nCountF,"个文件", nCountD,"个文件夹", nCountE,"个文件夹搜索出现异常"
CREATE CURSOR tt (fn C(240))
DIMENSION arrFile[nCountF,1]
APPEND FROM ARRAY arrFile  
GO TOP
BROWSE
ZAP
DIMENSION arrError[nCountE,1]
APPEND FROM ARRAY arrError
GO TOP
BROWSE
2018-07-24 22:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用sdta在2018-7-24 21:57:47的发言:

如果只是查找指定文件用不着这么麻烦

如果没指定路径或没设定搜索路径,也要先枚举路径,还有不同文件夹存在同一文件名。
资源管理器的文件搜索功能,如果关闭索引速度也不快。
2018-07-24 22:32
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2232
专家分:3913
注 册:2007-4-27
收藏
得分:2 
图片附件: 游客没有浏览图片的权限,请 登录注册


我的VF是8.0的,出现无效的下标 提示

只求每天有一丁点儿的进步就可以了
2018-07-25 08:23
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
回复 15楼 wengjl
6也会提示,只有在9下可以。
2018-07-25 08:44
zyxxzhyg
Rank: 3Rank: 3
来 自:江西
等 级:论坛游侠
威 望:5
帖 子:59
专家分:134
注 册:2014-6-26
收藏
得分:2 
吹版的试了下,速度是提高了,但D盘文件少了很多,C盘的数据和昨天测试的差不多,不知什么原因。
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-25 09:55
zyxxzhyg
Rank: 3Rank: 3
来 自:江西
等 级:论坛游侠
威 望:5
帖 子:59
专家分:134
注 册:2014-6-26
收藏
得分:0 
在windows中试了下文件统计(D盘,数据差别较大)
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-25 10:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:8 
对比测试了一下,用VFP的ADIR()搜索,结果与13楼用API的一样。
代码:
cPath = "D:\" &&GETDIR()
IF EMPTY(cPath)
    RETURN
ENDIF
DIMENSION arrDIR[1], arrFile[1], arrError[1]
arrDIR[1] = cPath
nCountD = 1
nCountF = 0
nCountE = 0
FOR EACH cPath IN arrDIR
    nCount = ADIR(arr_tmp, cPath+"*.*","RASHD")
    IF nCount < 1
        nCountE = nCountE + 1
        DIMENSION arrError[nCountE]
        arrError[nCountE] = "失败:" + cPath
        LOOP
    ENDIF
    FOR i=1 TO nCount
        IF "D"$arr_tmp[i,5]
            IF !(arr_tmp[i,1]==".") AND !(arr_tmp[i,1]=="..")
                nCountD = nCountD + 1
                DIMENSION arrDIR[nCountD]
                arrDIR[nCountD] = cPath + arr_tmp[i,1] + "\"
            ENDIF
        ELSE
            nCountF = nCountF + 1
            DIMENSION arrFile[nCountF]
            arrFile[nCountF] = cPath + arr_tmp[i,1]
        ENDIF
    ENDFOR
ENDFOR
? nCountF,"个文件", nCountD,"个文件夹", nCountE,"个文件夹搜索出现异常"
CREATE CURSOR tt (fn C(240))
DIMENSION arrFile[nCountF,1]
APPEND FROM ARRAY arrFile  
GO TOP
BROWSE
ZAP
DIMENSION arrError[nCountE,1]
APPEND FROM ARRAY arrError
GO TOP
BROWSE
2018-07-25 11:07
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
吹版,请修改程序,可以获取文件或目录的名称、大小、日期、时间和属性,以及文件的详细版本信息。

AGETFILEVERSION()函数可以获取文件版本信息。
2018-07-25 17:52
快速回复:遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020468 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved