我正在使用此解决方案删除某个路径中的所有空文件夹和子目录:
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
扩展名的文件的文件夹。
例如,我的文件夹包含以下文件:
一个日志
博客
录像机
达特
因此,该文件夹无法删除,因为它包含带有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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句