| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5874 人关注过本帖, 1 人收藏
标题:遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!
取消只看楼主 加入收藏
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:12 
遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!
本代码学习了网上前辈和吹版的代码,再次向他们表示感谢和敬意!

程序代码:
********************************************************************************
***功能:遍历指定盘符下的所有文件及文件夹,并获取所有相关信息。
***文件名:ScanFile.Prg
***调用格式:ScanFile('D:')
********************************************************************************
PARAMETERS cDrvmc
cDrvmc=UPPER(ALLTRIM(cDrvmc))
nOldsec=SECONDS( )
? '磁盘[ '+cDrvmc+' ]开始扫描...',DATETIME()
DIMENSION Myarrtol(1,5)  &&定义总数组
Myarrtol(1,1)=cDrvmc
Myarrtol(1,2)=''
Myarrtol(1,3)=DATE()
Myarrtol(1,4)=TIME()
Myarrtol(1,5)='....D'
nArrlen=ALEN(Myarrtol,1)  &&总数组的长度
nIarr=1
DO WHILE nIarr<=nArrlen   &&开始扫描指定磁盘
   IF 'D'$Myarrtol(nIarr,5)   &&是不是目录
      nNum=ADIR(Myarrtmp,Myarrtol(nIarr,1)+'*.*','RASHD')  &&获取指定目录下所有信息
      IF nNum#0
         DIMENSION Myarrtol(nArrlen+nNum+IIF(nIarr<=1,0,-2),5)  &&重新定义总数组
         FOR I=IIF(nIarr<=1,1,3) TO nNum    &&记录全路径并将新获取数据添加到总数组中,除根目录外跳过.和..
             Myarrtmp(I,1)=Myarrtol(nIarr,1)+Myarrtmp(I,1)+IIF('D' $ Myarrtmp(I,5),'\','')   &&获取全路径
*             WAIT WINDOW [color=#FF0000]'正在搜索:'+DISPLAYPATH(ALLTRIM(Myarrtmp(I,1)),100) NOWAIT    &&显示扫描对象[/color]
             FOR nI=1 TO 5
                 Myarrtol(nArrlen+IIF(nIarr<=1,I,I-2),nI)=Myarrtmp(i,nI)   &&将获取指定目录下的所有信息添加至总数组
             ENDFOR
         ENDFOR
      ENDIF
      RELEASE Myarrtmp
   ENDIF
   nArrlen=ALEN(Myarrtol,1)
   nIarr=nIarr+1
ENDDO
? '共找到[ '+TRANSFORM(ALEN(Myarrtol,1))+' ]条数据!'
? '扫描磁盘用时[ '+TRANSFORM(SECONDS()-nOldsec)+' ]秒!'
CREATE CURSOR Mydbf (wjmc C(254),wjcd N(20),wjrq D,wjshj C(10),wjsx C(6))   &&创建游标
APPEND FROM ARRAY Myarrtol    &&将总数组数据添加至游标中
&&获取了指定硬盘下的所有文件及文件夹信息后即可做任何处理,这个要看你想做什么了?呵呵...

1.红色行如果执行的话,会大大降低速度,建议不显示为好!
2.可以把自己需要的条件加入代码中,即可满足自己的需要!
3.正在完善获取每个文件的文件版本等相关信息,可提供更加全面的数据支持。

总结:用数组保存数据,提高了速度!具体速度自己测试吧,欢迎回复测试结果!谢谢!

[此贴子已经被作者于2018-7-23 23:41编辑过]

搜索更多相关主题的帖子: 指定 文件 获取 信息 总数 
2018-07-23 23:23
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
沙发!
测试电脑配置:
图片附件: 游客没有浏览图片的权限,请 登录注册

重新启动电脑后第一次扫描时间:
图片附件: 游客没有浏览图片的权限,请 登录注册

第二次扫描时间:
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-23 23:40
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
你的很快嘛,不错。比我的机器强。
2018-07-24 12:11
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
测试电脑配置:
图片附件: 游客没有浏览图片的权限,请 登录注册


扫描时间:
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-24 12:54
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
回复 6楼 吹水佬
C盘不让扫描,出错!

需要这个程序,主要是想解决一个问题:
就是我的程序在当前计算机上是否有相关或其他版本,如果有,就删除这些文件。

目前可以解决的是:
1、有相同文件名或文件名称的可以查到;
2、关键文件或数据版本也可以查到;
3、如果修改了关键文件,如EXE文件的名称,甚至扩展名都改了,目前也可以找到;
4、压缩后的文件扫描起来就会慢很多,当然压缩加密码就不行了。

还有其他可能吗?

请大神多提宝贵意见!谢谢!


[此贴子已经被作者于2018-7-25 11:19编辑过]

2018-07-24 18:01
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
回复 8楼 mywisdom88
这个我计算了,可以找到所有文件,和操作系统给出的结果一样。是可信的。
2018-07-24 18:04
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
回复 15楼 wengjl
6也会提示,只有在9下可以。
2018-07-25 08:44
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
吹版,请修改程序,可以获取文件或目录的名称、大小、日期、时间和属性,以及文件的详细版本信息。

AGETFILEVERSION()函数可以获取文件版本信息。
2018-07-25 17:52
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
这样的数据
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-07-25 18:13
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
收藏
得分:0 
不是,这是导出之后的结果,我的意思是带后边的文件信息。

获取的数据还存在数组中,到最后可以写到文件表里或者做其他用途。
2018-07-25 20:36
快速回复:遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!
数据加载中...
 
   



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

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