报告Directory.GetFiles的进度

use*_*753 7 c# .net-4.0

是否有一种快速的方法可以加载到每个文件(您具有读访问权限)的完全限定路径,从提供的根目录开始,比如说string[]

我看到了System.IO.Directory.GetFiles,但在你被允许输入之前你必须提供一个过滤器SearchOption.AllDirectories,所以我尝试了:

string[] directoryList = Directory.GetFiles(RootPath, "*.*",
                                            SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

RootPath我的有效根目录在哪里.这似乎工作正常,除了它指向一个29GB的大目录/文件结构和几十万个文件时,它挂了我的Windows窗体应用程序很长一段时间.

所以我考虑通过一个线程进行线程化,BackgroundWorker以便我的GUI看起来没有被锁定,但是我不确定我是如何报告这样的事情的进展ProgressBar因为它只是一个声明正在进行加载而我已经没有关于前期文件总数或已经处理过的数量的信息等.

Ree*_*sey 9

有了Directory.GetFiles,您将始终阻止,直到所有结果都被完全处理,这可能需要很长时间才能在大型目录结构上完成.

您可以使用Directory.EnumerateFiles而不是Directory.GetFiles.这会将结果作为IEnumerable<string>数组而不是数组返回,因此您可以立即开始处理(或报告进度)结果.

否则,最好的选择是使用Directory.GetFiles,但不是SearchOption.AllDirectories.然后,您可以使用Directory.GetDirectories自己处理递归,并分阶段解析结果.