8

有没有一种快速的方法可以从提供的根目录开始将每个文件(您具有读取权限)的完全限定路径加载到 a 中string[]

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

string[] directoryList = Directory.GetFiles(RootPath, "*.*",
                                            SearchOption.AllDirectories);

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

所以我考虑通过 a 对其进行线程化,BackgroundWorker这样我的 GUI 就不会出现锁定,但我不确定如何报告类似这样的事情的进度 aProgressBar因为它只是一个正在加载的语句,我已经没有关于预先文件总数的信息,或者它已经处理的数量等。

4

1 回答 1

12

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

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

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

于 2012-08-16T20:42:29.217 回答