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

相關問題