C#-如何快速,优化地列出子目录中的文件 [英] C# - How to list the files in a sub-directory fast, optimised way
问题描述
我正在尝试使用以下方法在根目录的所有子目录中列出文件.但是,当文件数量达到数百万时,这会花费很多时间.有没有更好的方法可以做到这一点.
I am trying to list the files in all the sub-directories of a root directory with the below approach. But its taking much time when the number of files are in millions. Is there any better approach of doing this.
我正在使用.NET 3.5,所以不能使用枚举器:-(
I am using .NET 3.5 so can't use enumerator :-(
******************* Main *************
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo[] subDir = dir.GetDirectories();
foreach (DirectoryInfo di in subDir) //call for each sub directory
{
PopulateList(di.FullName, false);
}
*******************************************
static void PopulateList(string directory, bool IsRoot)
{
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + "dir /s/b \"" + directory + "\"");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();
string fileName = directory.Substring(directory.LastIndexOf('\\') + 1);
StreamWriter writer = new StreamWriter(fileName + ".lst");
while (proc.StandardOutput.EndOfStream != true)
{
writer.WriteLine(proc.StandardOutput.ReadLine());
writer.Flush();
}
writer.Close();
}
推荐答案
删除所有与流程相关的内容,然后尝试 Directory.GetFiles()方法:
Remove all Process-related stuff and try out Directory.GetDirectories () and Directory.GetFiles() methods:
public IEnumerable<string> GetAllFiles(string rootDirectory)
{
foreach(var directory in Directory.GetDirectories(
rootDirectory,
"*",
SearchOption.AllDirectories))
{
foreach(var file in Directory.GetFiles(directory))
{
yield return file;
}
}
}
从MSDN, SearchOption.AllDirectories:
在搜索中包括当前目录和所有子目录 手术.此选项包括重新分析点,例如已安装的驱动器和 搜索中的符号链接.
Includes the current directory and all the subdirectories in a search operation. This option includes reparse points like mounted drives and symbolic links in the search.
这篇关于C#-如何快速,优化地列出子目录中的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!