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 ブロックに入れる必要がありますか (try ブロックでyield returnは許可されていない何かが必要な場合、これは非常に厄介になります)。

列挙子が例外をスローしないと仮定すると、ファイルの反復処理中にディレクトリが削除されるとどうなりますか?

4

1 に答える 1

3

残念ながら、この API はEnumerateFiles/EnumerateDirectories呼び出し呼び出しの両方で例外をスローする可能性がありMoveNextます。いずれの場合も、例外がスローされると、その列挙子を引き続き使用することはできません。

それだけではありませんDirectoryNotFoundExceptionUnauthorizedAccessExceptionなどを投げることもできPathTooLongExceptionます。

これはMicrosoftに報告されていますが、修正に関するニュースはありません。それまでの間、CodePlex には代替 APIがあり、 StackOverflow には別のアプローチがあります。

于 2012-11-20T18:20:32.587 に答える