这个问题提供了一种快速的方法来使用kernel.dll递归查找文件属性,例如文件名.问题是报告进度(例如在Windows窗体应用程序中)仅限于当前所在的文件或目录,因为它没有关于预先计算总文件数的信息.
虽然,我知道在Windows 7中如果使用文件浏览器搜索文件,它会显示搜索的进度条:

那他们怎么在这里做呢?这里是否知道总文件数量?是否有可能在上述相关问题的答案中模仿这种进展报告?如果没有完整的文件计数,我不知道如何做到这一点.
我能找到的最接近的问题是这个这个递归方法似乎存在一些问题,因为我没有预先计算机文件数,并且对于许多文件的单个目录,行为将是非常奇怪的.
根据您需要获得的准确程度,可能会有一个简单的双程解决方案(对于网络驱动器而言不是最佳选择,因此您可能需要在那里进行调整).
对于第一n级目录(例如4,包括驱动器),计算子目录的数量.这通常是一个快速操作,虽然你可以调整它只是在超过5个子目录存在或类似时递归.存储此号码.
在执行实际搜索时,请跟踪已完成的子目录数,这些子目录n位于根目录的步骤范围内.使用此编号和存储的计数来估算完成情况.
例如,具有基本结构:
C:\
a\
1\
i\
ii\
iii\
2\
3\
b\
c\
Run Code Online (Sandbox Code Playgroud)
数一,1,忽略了我和兄弟姐妹,计数2,等等.然后,当搜寻,增加当你完成搜索栏3,2,1,一,等等.
现在,这绝对不是万无一失的.可能存在竞争条件,它不是非常准确,以及各种其他事情.
但是,对于低粒度进度条,它足够接近它看起来非常准确.更重要的是,从用户体验的角度来看,使用存储的计数并将进度与之进行比较往往会阻止条形图在整个过程中生长.
我实际上在这里的一些代码中使用这种技术.
最初的构建,降低了10级,仍然非常快.我不记得进行了多少测试,但是在搜索2.5-3百万个文件时(尽管只提前检查了1/1000个文件),条形图明显准确而没有多次暂停.请注意,进度条越短,显示的越准确.;)
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |