标题:遍历硬盘文件和文件夹查询文件或文件夹提速问题
只看楼主
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
结帖率:100%
已结贴  问题点数:20 回复次数:8 
遍历硬盘文件和文件夹查询文件或文件夹提速问题
这是学习了网上的遍历硬盘查询文件或文件夹的程序,修改的结果。就是运行速度太慢了,请各位大神给修改成纯数组操作,不用数据表(游标),可能会快一点。

scanfile('d:','lkysics2018.exe','A','lkysics','D')

程序代码:
Parameter dqml,scanobj1,scanobj1type,scanobj2,scanobj2type
dqml=upper(alltrim(dqml))
scanobj1=upper(alltrim(scanobj1))
scanobj1type=upper(alltrim(scanobj1type))
scanobj2=upper(alltrim(scanobj2))
scanobj2type=upper(alltrim(scanobj2type))
oldsec=SECONDS( )
valoldsec=oldsec
? ''
? dqml
? scanobj1
? scanobj1type
? scanobj2
? scanobj2type
? '准备工作开始...'
Close Table All
Create Cursor mylsdbf (wjmc C(254),wjcd N(20),wjrq D,wjshj C(10),wjsx C(6))
Append Blank
Replace wjmc With dqml
Do While !Eof()
   nRecn=Recno()
   dqml=Alltrim(wjmc)+'\'
   x=Adir(Mysz,(dqml+'*.*'),'rashd')
   If x <> 0
      For I=3 To x
          Mysz(I,1)=dqml+Mysz(I,1)
      Endfor
      Append From Array Mysz For Alltrim(wjmc)<>'.' And Alltrim(wjmc)<>'..'
   Endif
   Go nRecn
   Skip
Enddo
Go Top
oldseccc=alltrim(str(SECONDS( )-valoldsec))
valoldsec=SECONDS( )
? '准备工作用时[ '+oldseccc+' ]秒!'
? '搜索目标开始...'
Scan
    WAIT WINDOW '正在搜索[ ' + iif(len(ALLTRIM (wjmc))>150,left(ALLTRIM (wjmc),150),ALLTRIM (wjmc))+ " ]进程:"+alltrim(str(recno()))+"/" +alltrim(str(reccount())) NOWAIT
    if !empty(scanobj1) .and. !empty(scanobj1type)
       if (scanobj1 $ alltrim(wjmc)) .and. (scanobj1type $ wjsx)
          ? wjmc,wjcd,wjrq,wjshj,wjsx
       endif
    endif
    if !empty(scanobj2) .and. !empty(scanobj2type)
       if (scanobj2 $ alltrim(wjmc)) .and. (scanobj2type $ wjsx)
          ? wjmc,wjcd,wjrq,wjshj,wjsx
       endif
    endif
EndScan
Use
oldseccc=alltrim(str(SECONDS( )-valoldsec))
valoldsec=SECONDS( )
? '搜索用时[ '+oldseccc+' ]秒!'
oldseccc=alltrim(str(SECONDS( )-oldsec))
? '总用时[ '+oldseccc+' ]秒!'
搜索更多相关主题的帖子: 遍历 文件 文件夹 And str 
2018-07-20 15:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
不用表查询结果如何显示

坚守VFP最后的阵地
2018-07-20 19:32
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
通过内在变量,数组存储、显示,已解决!谢谢版主!

vfp6中显示内在变量太多,vfp9中就可以顺利完成!

还是9强大!

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

2018-07-20 21:39
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
经测试,还是比表要快一点,扫描23万个文件,约10分钟,通过数组可以快1分钟左右。还可以,继续优化,可以更快。
2018-07-20 21:45
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
查找要有针对性

坚守VFP最后的阵地
2018-07-20 22:50
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
scanfile('d:','lkysics2018.exe','A','lkysics','D')
第一个参数:磁盘符
第二个参数:文件名
第三个参数:类型
第四个参数:文件夹名
第五个参数:类型

其实可以更多!只要获取了所有文件的档案,那不就想怎么查就怎么查了。
2018-07-20 23:12
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
已优化到10万文件,30秒左右扫描完成了!还不错。
2018-07-21 10:36
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:680
专家分:1287
注 册:2009-3-1
得分:10 
可以分享否?
2018-07-21 14:07
hyswcyh
Rank: 8Rank: 8
等 级:贵宾
威 望:20
帖 子:391
专家分:896
注 册:2004-11-23
得分:0 
回复 8楼 xs591222
编程论坛 - 遍历指定盘符下的所有文件及文件夹并获取所有信息,欢迎交流提速!  https://bbs.bccn.net/thread-488779-1-1.html
2018-07-24 11:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488715-1-1.html




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

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