【问题标题】:Can iterating over DirectoryInfo.EnumerateFiles throw an exception?遍历 DirectoryInfo.EnumerateFiles 会引发异常吗?
【发布时间】:2012-11-08 21:07:38
【问题描述】:

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

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

【问题讨论】:

    标签: c# exception io


    【解决方案1】:

    不幸的是,此 API 可能在 EnumerateFiles / EnumerateDirectories 调用 MoveNext 调用时引发异常。无论哪种情况,一旦引发异常,您就无法继续使用该枚举器。

    不仅仅是DirectoryNotFoundException;也可以抛出UnauthorizedAccessExceptionPathTooLongException等。

    这是reported to Microsoft,但没有关于修复的消息。与此同时,还有一个alternative API on CodePlexdifferent approach on StackOverflow

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多