1

调用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 块中是不允许的)?

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

4

1 回答 1

3

不幸的是,这个 API 可以在EnumerateFiles/EnumerateDirectories调用调用上都抛出异常MoveNext。无论哪种情况,一旦抛出异常,您就不能继续使用该枚举器。

不只是DirectoryNotFoundException;它也可以抛出UnauthorizedAccessException,PathTooLongException和其他的。

这已报告给 Microsoft,但没有关于修复的消息。与此同时,CodePlex 上有替代 API,或者StackOverflow 上有不同的方法

于 2012-11-20T18:20:32.587 回答