2016-12-04 44 views
0

我試圖清理我的lightroom文件夾,並發現有時存在隱藏的文件留下來移動它們周圍的文件。試圖刪除空的文件夾,或只有隱藏的文件在

我做了一些搜索,並能建立這個怪人的功能,但每一次它試圖刪除一個空文件夾,我得到一個錯誤,指出該文件夾是由另一個進程使用....

基本上我試圖通過所有文件夾重複並刪除那些空的子文件夾,或者只包含隱藏文件的文件夾。如果沒有文件(或只有隱藏文件)包含在其中,則該過程應該重複通過刪除其子代的所有文件夾以及最終的父文件夾。

任何幫助或建議將不勝感激!

乾杯!

private static void processDirectory(string startLocation) 
    { 
     //For every folder in this folder, recurse into that folder and take a peek... 
     foreach (var directory in Directory.GetDirectories(startLocation)) 
     { 
      processDirectory(directory); 
      //Get a handle to the directory to get files and whatnot from.... 
      DirectoryInfo di = new DirectoryInfo(directory); 
      FileInfo[] files = di.GetFiles(); 

      //We want to ignore any hidden files in the directory 
      var filtered = files.Where(f => !f.Attributes.HasFlag(FileAttributes.Hidden)); 

      //Make sure there are no other files or directories behind this one 
      if (filtered.Count() == 0 && Directory.GetDirectories(directory).Length == 0) 
      { 
       //Okay it's safe, delete it now. 
       di.Delete(); 
      } 
     } 
    } 
+0

(注意:我沒有運行它來嘗試,所以這只是猜測):在發佈目錄之前需要處理「di」嗎? – ClickRick

+0

使用Process Explorer找出鎖定目錄的進程。即使Lightroom未運行,最有可能的一些Adobe服務仍在運行。 –

+0

我認爲這可能與操作系統有關。該文件還不完全「發佈」。不確定'釋放'是否是正確的詞。但我們之前有這個問題。當我們試圖刪除上一步創建的一些文件時,它可能會顯示此異常。我們必須使用循環,刪除文件,然後檢查文件是否存在,如果是,則等待一段時間,10/100ms,然後再次刪除。我們循環3次。這似乎解決了這個問題。 – urlreader

回答

0

那麼如果這不足夠奇怪,今天早上當我運行代碼時,它工作得很好!?我的文件夾已被剪掉,只有那些實際上有照片的文件夾,而且生活很好。
我必須做的一件事是將true添加到di.Delete()函數。這是因爲該功能停止在其中隱藏文件的文件夾中。
我認爲這是沿着Chris上面發佈的內容的某些東西,而某些潛在功能仍然是從Adobe打開的。

感謝大家發佈的回覆!

乾杯!