簡體   English   中英

如何有效刪除空目錄(和空子目錄)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM