2012-11-20 108 views
0

致電DirectoryInfo.EnumerateFiles可能會拋出異常,如DirectoryNotFoundException。只有當我獲取IEnumerable對象時,或者在迭代文件時(即當foreach調用IEnumerator<FileInfo>.MoveNext時),纔會發生這種情況嗎?迭代DirectoryInfo.EnumerateFiles是否會拋出異常?

換句話說,下面的代碼是否安全?

IEnumerable<FileInfo> fileInfos; 
try 
{ 
    fileInfos = directoryInfo.EnumerateFiles(); 
} 
catch // snip 
{ 
    // snip 
} 

foreach (FileInfo fileInfo in fileInfos) 
{ 
    // Do something 
} 

或者我需要把部分的foreach進入try塊,太(成爲如果我想很討厭到yield return東西,這不是在try塊允許的)?

假設枚舉器不會拋出異常,在迭代文件時刪除目錄時會發生什麼?

回答

2

不幸的是,這個API在EnumerateFiles/EnumerateDirectories呼叫MoveNext呼叫都拋出異常。在任何一種情況下,一旦拋出異常,就不能繼續使用該枚舉器。

這不僅僅是DirectoryNotFoundException;它也可以拋出UnauthorizedAccessException,PathTooLongException等。

這是reported to Microsoft,但沒有修復的消息。與此同時,還有一個alternative API on CodePlexdifferent approach on StackOverflow