我需要获取所有Word文档的列表.*.doc和*.docx存储在基于Windows的文件夹中,包含许多子文件夹和子子文件夹等...
使用C#搜索文件有一个有效的答案,它是2年,需要10秒才能搜索1500个文件,(将来可能会有10,000个或更多).我将发布我的代码,它基本上是上述链接的副本.有没有人有更好的解决方案?
DateTime dt = DateTime.Now;
DirectoryInfo dir = new DirectoryInfo(MainFolder);
List<FileInfo> matches =
new List<FileInfo>(dir.GetFiles("*.doc*",SearchOption.AllDirectories));
TimeSpan ts = DateTime.Now-dt;
MessageBox.Show(matches.Count + " matches in " + ts.TotalSeconds + " seconds");
Run Code Online (Sandbox Code Playgroud)
您可以使用Directory.EnumerateFiles而不是GetFiles.这样做的好处是可以将文件作为一个文件返回IEnumerable<T>,这样您就可以立即开始处理结果集(而不是等待返回整个列表).
如果您只是计算文件数量或列出所有文件,则可能无济于事.但是,如果您可以对结果进行处理和/或过滤,特别是如果您可以在其他线程中执行任何操作,则可以明显更快.
从文档:
EnumerateFiles和GetFiles方法的不同之处如下:当您使用EnumerateFiles时,您可以在返回整个集合之前开始枚举名称集合; 当您使用GetFiles时,您必须等待返回整个名称数组,然后才能访问该数组.因此,当您使用许多文件和目录时,EnumerateFiles可以更高效.