可以遍历DirectoryInfo.EnumerateFiles抛出异常吗?

时间:2012-11-20 18:02:15

标签: c# exception io

调用DirectoryInfo.EnumerateFiles可能会引发DirectoryNotFoundException等异常。这只能在我获取IEnumerable对象时,或者在迭代文件时(即foreach调用IEnumerator<FileInfo>.MoveNext时)发生吗?

换句话说,以下代码是否安全?

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

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

或者我是否需要将foreach部分放入try块中(如果我想要yield return某些东西会变得非常讨厌,这在try块中是不允许的)?

假设枚举器没有抛出异常,那么在迭代文件时删除目录会发生什么?

1 个答案:

答案 0 :(得分:2)

不幸的是,此API可能会在EnumerateFiles / EnumerateDirectories电话 MoveNext电话上抛出异常。在任何一种情况下,一旦抛出异常,就无法继续使用该枚举器。

这不只是DirectoryNotFoundException;它也可以抛出UnauthorizedAccessExceptionPathTooLongException和其他人。

这是reported to Microsoft,但没有关于修复的消息。在此期间,有alternative API on CodePlexdifferent approach on StackOverflow