我是一名Java兽医,但对.NET来说是新手。我需要按类型和C#中的总计收集文件的总大小和数量。有没有比递归搜索更好的方法?另外,我需要找到多种类型。 HashTable是否适合加载我的扩展并更新?
void DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
FileInfo[] fiArr = d.GetFiles();
foreach (string f in fiArr)
{
String ext = Path.GetExtension(f.Name);
if (myht.ContainsKey(ext)
{
myht[ext] = myht[ext] + f.Length;
}
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
答案 0 :(得分:1)
您应该致电Directory.EnumerateFiles(sDir, SearchOption.AllDirectories)
答案 1 :(得分:0)
@Slaks概述了一般方法 - 因为你确实需要支持一组不同的文件扩展名并想要获得统计信息,所以编写自定义方法可能会更好,所以你只需要遍历目录树一次。
除了使用递归调用之外,您只需使用Stack来表示递归,下面只是一个基于扩展枚举返回匹配文件列表的示例 - 您可以根据您的场景轻松修改它:
public static List<string> DirSearch(string startDirectory, IEnumerable<string> extensions)
{
Stack<string> directoryStack = new Stack<string>();
List<string> files = new List<string>();
directoryStack.Push(startDirectory);
while (directoryStack.Count > 0)
{
string currentDirectory = directoryStack.Pop();
DirectoryInfo di = new DirectoryInfo(currentDirectory);
files.AddRange(di.EnumerateFiles()
.Where(f => extensions.Contains(f.Extension))
.Select(f => f.FullName));
foreach (string directory in Directory.GetDirectories(currentDirectory))
directoryStack.Push(directory);
}
return files;
}