![](/img/trans.png)
[英]Debugging GetAllFilesAndDirectories method, when there are empty sub-directories
[英]How to efficiently delete empty directories (and empty sub-directories)
我写了一个运动检测winform c#desktop app。
运动帧作为单独的jpeg保存到我的硬盘驱动器中。
我记录了4台摄像机。 这由变量表示:
每个jpeg都在一个文件结构下:
c:\\ Year \\ The Month \\ The Day \\ The Hour \\ The Minute
...确保目录中的每个文件都没有太多文件。
我的目的是让我的应用程序全天候运行。 应用程序可能会因系统重启或用户选择暂时关闭它等原因而停止。
我需要删除超过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
将重载与bool
一起使用 ,并将true
传递给递归删除。 这也将防止抛出的IOException
。
.ForEach(f => Directory.Delete(f, true));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.