1

我正在使用 enumeratefiles 列出目录中的所有文件。它在遇到包含非法字符的文件名时抛出异常,然后停止列出文件的 foreach 循环。尽管出现异常,如何使 foreach 循环继续列出文件名?有任何想法吗?

代码:

try {

DirectoryInfo directory = new DirectoryInfo(targetPath);
IEnumerable<FileInfo> allfiles = directory.EnumerateFiles("*.*", SearchOption.AllDirectories);

foreach (FileInfo file in allfiles)
{
    Console.WriteLine(file.Name);
}

}
catch (ArgumentException o)
{
    Console.WriteLine("Error: {0}", o.Message);
}
4

1 回答 1

2

foreach你有循环周围的try catch 。这意味着如果循环内的任何一个调用失败,您的代码将中止循环的其余部分。

将代码更改为如下所示:

foreach (FileInfo file in allfiles)
{
    try
    {
        Console.WriteLine(file.Name);
    }
    catch (ArgumentException o)
    {
        Console.WriteLine("Error: {0}", o.Message);
    }
}

您仍然应该尝试... catchEnumerateFiles以防引发错误。

于 2012-04-13T21:05:00.880 回答