![](/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.