在我的下载文档应用程序中,当我遍历目录以获取文件详细信息并重命名&时,我收到Stackoverflow Exception as Unhandled
。将文件移动到某个文件夹,我的代码是
public FileInfo GetNewestFile()
{
try
{
System.IO.DirectoryInfo directory = new DirectoryInfo(TempDownloadFolder);
FileInfo result = null;
var list = directory.GetFiles(); // Stackoverflow Exception occurs here
if (list.Count() > 0)
{
result = list.OrderByDescending(f => f.LastWriteTime).First();
}
return result;
}
catch (Exception ex)
{
throw ex;
}
}
即应用程序从网站下载PDF
和MS-Word
文件,如果按顺序下载PDF
文件directory.GetFiles()
正常工作,但下载1个或更多{ {1}}文件,然后下载应用程序抛出的PDF
文件MS-Word
例外。
当我重新启动应用程序时,下载System.Stackoverflow
文件,因为它是该阵容中的第一个文件,只有在下载了少量文件后才能下载另一个MS-Word`文件
据我所知,由于分配了大量内存,可能会发生异常,但我无法弄清楚为什么MS-Word
文件没有发生,只发生在PDF
文件中
修改
我之前用来返回最新文件的代码是
MS-Word
上面的代码也导致了Stackoverflow异常
答案 0 :(得分:2)
请尝试directory.EnumerateFiles()
而不是directory.GetFiles()
。然后,而不是.Count() > 0
使用.Any()
。
它们的区别如下:
EnumerateFiles
时,可以在返回整个集合之前开始枚举FileInfo对象的集合。GetFiles
时,必须等待返回整个FileInfo对象数组,然后才能访问该数组。
因此,当您使用许多文件和目录时,EnumerateFiles可以更有效。从此MSDN页面:https://msdn.microsoft.com/en-us/library/4cyf24ss(v=vs.110).aspx
答案 1 :(得分:-1)
你应该检查你的TempDownloadFolder字符串值。 对我来说它工作正常。
在bin / debug / Temp项目目录中创建文件夹名称Temp
public FileInfo GetNewestFile()
{
try
{
System.IO.DirectoryInfo directory = new DirectoryInfo(@"Temp");
FileInfo result = null;
var list = directory.GetFiles(); // Stackoverflow Exception occurs here
if (list.Count() > 0)
{
result = list.OrderByDescending(f => f.LastWriteTime).First();
}
return result;
}
catch (Exception ex)
{
throw ex;
}
}