是否有一种快速方法可以加载每个文件(您具有读访问权限)的完全限定路径,从提供的根目录开始,例如string[]
?
我看到System.IO.Directory.GetFiles
,但在您被允许输入SearchOption.AllDirectories
之前必须提供过滤器,所以我尝试了:
string[] directoryList = Directory.GetFiles(RootPath, "*.*",
SearchOption.AllDirectories);
RootPath
是我有效的有根目录。这似乎工作正常,除了它指向一个29GB的大型目录/文件结构和几十万个文件时,它挂了我的Windows窗体应用程序很长一段时间。
所以我考虑通过BackgroundWorker
对其进行线程处理,以便我的GUI看起来没有锁定,但我不确定如何为ProgressBar
报告此类内容的进度因为它只是一个正在进行加载的语句,我没有关于前期文件总数的信息,或者它已经处理过的数字等信息。
答案 0 :(得分:8)
使用Directory.GetFiles
,您将始终阻止,直到完成所有结果的处理,这可能需要很长时间才能完成大型目录结构。
您可以使用Directory.EnumerateFiles代替Directory.GetFiles
。这会将结果返回为IEnumerable<string>
而不是数组,因此您可以立即开始处理(或报告进度)结果。
否则,最好的选择是使用Directory.GetFiles
,而不是SearchOption.AllDirectories
。然后,您可以使用Directory.GetDirectories
自行处理递归,并分阶段解析结果。