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); 
} 
+0

请将您的密码发送 – 2012-04-13 17:31:09

+0

您是说您的硬盘上存有无效字符的文件?无论如何..显示一些东西开始使用它(添加一个try..catch,添加支票,谁知道!)向我们展示一些代码;) – gbianchi 2012-04-13 17:32:18

+0

它的我的下载文件夹及其用于不同编码语言的示例项目,那些无数的文件夹之一。尽管如此,我仍然需要找到解决办法。 @BrianRasmussen我更新了代码。 – 2012-04-13 17:38:01

回答

2

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

更改代码是这样的:

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

你应该还是有尝试... ...的EnumerateFiles各地赶在引发错误的情况。

+0

我不明白你为什么要将'try/catch'移到'Console.WriteLine'附近......?你认为'Console.WriteLine'是否抛出异常?似乎'IEnumerable.Current'或'IEnumerable.MoveNext'是什么在这里扔... – 2012-04-13 21:35:25

+0

谢谢队友:)它现在完美的作品! – 2012-04-13 21:58:27

+0

@ChrisF是的,出于某种原因,它是抛出异常的Console.WriteLine。 – 2012-04-13 22:36:11