我正在使用此解决方案删除特定路径中的所有空文件夹和子目录:
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
的文件的文件夹。
例如我的文件夹有以下文件:
a.log
b.log
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;
}
关于c# - 删除所有没有特定扩展名文件的文件夹和子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272173/