2016-12-04 3 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

OSと関連しているかもしれないと思います。このファイルはまだ完全にリリースされていません。 'リリース'が正しい単語であるかどうかは不明です。しかし、以前はこの問題があります。前の手順で作成したファイルを削除しようとすると、この例外が表示されることがあります。ループを使用してファイルを削除し、ファイルが存在するかどうかを確認し、そうであれば10/100msの短い時間待ってから再度削除する必要があります。私たちは3回ループします。これは問題を修正したようです。 – urlreader

答えて

0

これは奇妙なことではない場合は、今朝私はコードを実行したときにうまく働いた!私のフォルダは実際に写真が入っているものだけに剪定されており、人生は良いです。
私がしなければならなかったことの1つはdi.Delete()機能にtrueを加えることです。これは、その機能が隠しファイルを含むフォルダで停止していたためです。
私はそれがChrisが上に投稿した行に沿って何かであり、潜在的な機能がAdobeからまだ開いていたと仮定しています。

回答ありがとうございました。

乾杯!

関連する問題