我使用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);
}
答案 0 :(得分:2)
你有foreach
循环的try catch。这意味着如果循环中的任何一个调用失败,您的代码将中止循环的其余部分。
将代码更改为:
foreach (FileInfo file in allfiles)
{
try
{
Console.WriteLine(file.Name);
}
catch (ArgumentException o)
{
Console.WriteLine("Error: {0}", o.Message);
}
}
如果发生错误,你仍然应该试试{EnumerateFiles
。