【发布时间】:2019-02-08 01:36:26
【问题描述】:
下面是我获取大目录中所有文件的代码(框架 3.5)。它运行约 1 小时,但无法完成,任务管理器中的内存高达 1,600,000K
void ApplyAllFiles(DirectoryInfo dir)
{
String space = " ";
foreach (FileInfo f in dir.GetFiles())
{
try
{
int size = Convert.ToInt32(f.Length / 1024);
if (size > filesize && isFileType(f.FullName) == true)
{
pw.WriteLine(f.LastWriteTime + space + size + space + f.FullName);
}
}
catch
{ }
}
foreach (DirectoryInfo d in dir.GetDirectories())
{
try
{
ApplyAllFiles(d);
}
catch
{
}
}
}
如果我使用 Java 代码,只需 5 分钟即可完成,内存总是
我通过在 TRY { } 中使用 FOREACH 循环来解决它。
【问题讨论】:
-
你试过
Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories)吗? -
写空的 catch 块总是一个坏主意。
-
您可能希望在此处利用
DirectoryInfo.EnumerateDirectories和DirectoryInfo.EnumerateFiles。 -
@John,什么时候是个好主意?
-
@kienvu GetFiles 如果文件太多,会抛出内存不足。如果您遇到访问错误,请改用
EnumerateFiles并尝试以管理员身份运行程序。
标签: c# recursion directory filepath