C# 报告Directory.GetFiles的进度
是否有一种快速方法可以将从提供的根目录开始的每个文件(您具有读取权限)的完全限定路径加载到C# 报告Directory.GetFiles的进度,c#,.net-4.0,C#,.net 4.0,是否有一种快速方法可以将从提供的根目录开始的每个文件(您具有读取权限)的完全限定路径加载到字符串[] 我看到了System.IO.Directory.GetFiles,但是在允许输入搜索选项之前,您必须提供一个过滤器。AllDirectories,因此我尝试: string[] directoryList = Directory.GetFiles(RootPath, "*.*", SearchOption.A
字符串[]
我看到了System.IO.Directory.GetFiles
,但是在允许输入搜索选项之前,您必须提供一个过滤器。AllDirectories
,因此我尝试:
string[] directoryList = Directory.GetFiles(RootPath, "*.*",
SearchOption.AllDirectories);
其中RootPath
是我的有效根目录。这似乎还可以,只是当它指向一个29GB的大目录/文件结构和几十万个文件时,我的windows窗体应用程序挂起了很长时间
所以我想通过一个
BackgroundWorker
来线程化它,这样我的GUI就不会被锁定,但是我不确定如何为ProgressBar
报告这样的进度,因为它只是一个执行加载的语句,我没有关于前面文件总数的信息,或者它已经处理的数字等。使用目录.GetFiles
,您将始终阻止,直到所有结果都被完全处理,这在大型目录结构上可能需要很长时间
您可以使用而不是Directory.GetFiles
。这将以IEnumerable
而不是数组的形式返回结果,因此您可以立即开始处理(或报告进度)结果
否则,最好的选择是使用Directory.GetFiles
,而不是SearchOption.AllDirectories
。然后,您可以使用自己处理递归,并分阶段解析结果