如何有效地删除空目录(和空子目录)
How to efficiently delete empty directories (and empty sub-directories)
我写了一个运动检测 winform c# 桌面应用程序。
运动帧以单独的 jpeg 格式保存到我的硬盘中。
我用 4 个摄像头进行记录。这由变量表示:
每个 jpeg 都在一个文件结构下:
c:\The Year\The Month\The Day\The Hour\The 分钟
...以确保每个目录中的文件不会太多。
我的目的是让我的应用程序全天候运行 24/7。该应用程序可能会因系统重启或用户选择暂时关闭等原因而停止。
我需要删除超过 24 小时的文件。
我使用这段代码来完成:
Directory
.GetFiles(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
.Where(item =>
{
try
{
var fileInfo = new FileInfo(item);
if (fileInfo.CreationTime < DateTime.Now.AddHours(-24))
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
})
.ToList()
.ForEach(File.Delete);
然后我用它来删除目录:
Directory
.GetDirectories(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
.Where(item =>
{
try
{
var dirInfo = new DirectoryInfo(item);
if (dirInfo.CreationTime < DateTime.Now.AddHours(-24) && !dirInfo.EnumerateFiles().Any())
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
})
.ToList()
.ForEach(Directory.Delete);
但是如果有子目录(即使没有文件)删除目录当然会出错。
有没有办法在子文件夹为空或..时自动删除子文件夹?
不用说,由于我的应用程序的性质,这必须是一个低进程操作。
谢谢
是的。使用允许递归删除的重载。
Directory.Delete(path, true)
http://msdn.microsoft.com/en-us/library/fxeahc5f%28v=vs.110%29.aspx
使用overload with a bool
并传递true
递归删除。这也将阻止抛出的 IOException
。
.ForEach(f => Directory.Delete(f, true));
我写了一个运动检测 winform c# 桌面应用程序。
运动帧以单独的 jpeg 格式保存到我的硬盘中。
我用 4 个摄像头进行记录。这由变量表示:
每个 jpeg 都在一个文件结构下:
c:\The Year\The Month\The Day\The Hour\The 分钟
...以确保每个目录中的文件不会太多。
我的目的是让我的应用程序全天候运行 24/7。该应用程序可能会因系统重启或用户选择暂时关闭等原因而停止。
我需要删除超过 24 小时的文件。
我使用这段代码来完成:
Directory
.GetFiles(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
.Where(item =>
{
try
{
var fileInfo = new FileInfo(item);
if (fileInfo.CreationTime < DateTime.Now.AddHours(-24))
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
})
.ToList()
.ForEach(File.Delete);
然后我用它来删除目录:
Directory
.GetDirectories(Shared.MOTION_DIRECTORY, "*.*", SearchOption.AllDirectories)
.Where(item =>
{
try
{
var dirInfo = new DirectoryInfo(item);
if (dirInfo.CreationTime < DateTime.Now.AddHours(-24) && !dirInfo.EnumerateFiles().Any())
{
return true;
}
else
{
return false;
}
}
catch (Exception)
{
return false;
}
})
.ToList()
.ForEach(Directory.Delete);
但是如果有子目录(即使没有文件)删除目录当然会出错。
有没有办法在子文件夹为空或..时自动删除子文件夹?
不用说,由于我的应用程序的性质,这必须是一个低进程操作。
谢谢
是的。使用允许递归删除的重载。
Directory.Delete(path, true)
http://msdn.microsoft.com/en-us/library/fxeahc5f%28v=vs.110%29.aspx
使用overload with a bool
并传递true
递归删除。这也将阻止抛出的 IOException
。
.ForEach(f => Directory.Delete(f, true));