使用Directory.EnumerateFiles
?
这样的事情:
foreach (var fileName in Directory.EnumerateFiles("Sub"))
File.Delete(fileName);
我知道,一般来说,你不应该修改你所枚举的内容。但是,由于上面的代码有效,文件系统似乎没有遵循该规则。
同样的问题适用于EnumerateDirectories
和EnumerateFileSystemEntries
,以及DirectoryInfo
类的等效方法。
答案 0 :(得分:1)
是的,您可以安全地删除此枚举期间的当前文件(至少在Windows上)。 Directory.EnumerateFiles
通过FindFirstFile和FindNextFile winapi调用在内部(在Windows上)实施。因此,首先调用FindFirstFile
,并在每个迭代器前进(MoveNext()
) - FindNextFile
被调用。如果在这些调用之间删除了文件 - 这对于该api来说不是问题,FindNextFile
将只返回下一个匹配文件。在您的情况下,您删除当前文件,以便根本不跳过任何内容。如果在枚举过程中添加了新文件 - 它将取决于它的名称是否包括在内。假设你已经有文件" b.txt"和" c.txt"然后提交" a.txt"加入。使用Directory.EnumerateFiles
不会包含此类文件,因为它的名称是" less" (在某种意义上)已经枚举的文件。退货顺序并不那么简单(取决于文件系统),但你明白了。