调用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块中是不允许的)?
假设枚举器没有抛出异常,那么在迭代文件时删除目录会发生什么?
答案 0 :(得分:2)
不幸的是,此API可能会在EnumerateFiles
/ EnumerateDirectories
电话和 MoveNext
电话上抛出异常。在任何一种情况下,一旦抛出异常,就无法继续使用该枚举器。
这不只是DirectoryNotFoundException
;它也可以抛出UnauthorizedAccessException
,PathTooLongException
和其他人。
这是reported to Microsoft,但没有关于修复的消息。在此期间,有alternative API on CodePlex或different approach on StackOverflow。