我正在使用此解决方案删除特定路径中的所有空文件夹和子目录:
static void Main(string[] args) { processDirectory(@"c:\temp"); } private static void processDirectory(string startLocation) { foreach (var directory in Directory.GetDirectories(startLocation)) { processDirectory(directory); if (Directory.GetFiles(directory).Length == 0 && Directory.GetDirectories(directory).Length == 0) { Directory.Delete(directory, false); } } }
它完美地运作.但我想删除所有空文件夹以及非空文件夹,但也不包含.dvr
扩展名文件.
例如,我的文件夹包含以下文件:
一个日志
博客
c.dvr
d.dat
因此,无法删除此文件夹,因为它包含带有dvr扩展名的文件.
我该如何过滤它?(我正在使用GTK#但我相信C#代码可以工作,因为这个解决方案是C#代码)
不幸的是,错误处理在IO操作中是非常例外的.如果目录不为空,则Directory.Delete会抛出IOException.所以你必须手动删除文件:
private static bool processDirectory(string startLocation) { bool result = true; foreach (var directory in Directory.GetDirectories(startLocation)) { bool directoryResult = processDirectory(directory); result &= directoryResult; if (Directory.GetFiles(directory, "*.dvr").Any()) { result = false; continue; } foreach(var file in Directory.GetFiles(directory)) { try { File.Delete(file); } catch(IOException) { // error handling result = directoryResult = false; } } if (!directoryResult) continue; try { Directory.Delete(directory, false); } catch(IOException) { // error handling result = false; } } return result; }