在 IEnumerator 中抛出内存不足异常时跳过 MoveNext()



我正在使用IEnumerator来获取路径下的所有文件,这可能是超过3000万个文件。对于几百万个文件,我的代码正在工作,但在 while 循环中的某个时候,我在MoveNext()中出现内存不足异常。有没有办法跳过异常并再次调用MoveNext()以继续该过程?或者有更好的方法可以做到这一点吗?

using (IEnumerator<string> filepaths = System.IO.Directory.EnumerateFiles(startPath, "*", System.IO.SearchOption.AllDirectories).GetEnumerator())
{
while (true)
{
try
{
if (!filepaths.MoveNext())
{
//im getting OOM here
break;
}
}
catch (Exception e)
{
}
}
}

我尝试使用它,但我得到同样的错误。

foreach(string path in System.IO.Directory.EnumerateFiles(startPath, "*", System.IO.SearchOption.AllDirectories))
{
//do the processing in path
}

这是我得到的错误

System.OutOfMemoryException:抛出类型为"System.OutOfMemoryException"的异常。
at System.String.Concat(String str0, String str1, String str2( at System.IO.Path.CombineNoChecks(String path1, String path2( at System.IO.FileSystemEnumerableIterator'1.AddSearchableDirsToStack(SearchData localSearchData( at System.IO.FileSystemEnumerableIterator'1.MoveNext((


谢谢大家,我找到了解决问题的方法

foreach (string item in  Alphaleonis.Win32.Filesystem.Directory.EnumerateFiles(startPath, "*", System.IO.SearchOption.AllDirectories))
{
//do work 
}

阿尔法莱奥尼斯解决了我的问题

相关内容

  • 没有找到相关文章

最新更新