DirectoryInfo.GetFiles抛出未处理的StackOverflowException

时间:2016-10-17 07:32:52

标签: c# .net winforms

在我的下载文档应用程序中,当我遍历目录以获取文件详细信息并重命名&时,我收到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;
    }
}            

即应用程序从网站下载PDFMS-Word文件,如果按顺序下载PDF文件directory.GetFiles()正常工作,但下载1个或更多{ {1}}文件,然后下载应用程序抛出的PDF文件MS-Word例外。

当我重新启动应用程序时,下载System.Stackoverflow文件,因为它是该阵容中的第一个文件,只有在下载了少量文件后才能下载另一个MS-Word`文件

据我所知,由于分配了大量内存,可能会发生异常,但我无法弄清楚为什么MS-Word文件没有发生,只发生在PDF文件中

修改

我之前用来返回最新文件的代码是

MS-Word

上面的代码也导致了Stackoverflow异常

2 个答案:

答案 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;
        }
    }