2012-11-20 60 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