私は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();
}
}
}
(警告:私は試してみるために実行していないので、これはちょうど推測です):ディレクトリを解放する前に 'di'を削除する必要がありますか? – ClickRick
Process Explorerを使用して、どのプロセスにディレクトリがロックされているかを調べます。 Lightroomが動作していなくても、ほとんどの場合、Adobeの一部のサービスは実行中です。 –
OSと関連しているかもしれないと思います。このファイルはまだ完全にリリースされていません。 'リリース'が正しい単語であるかどうかは不明です。しかし、以前はこの問題があります。前の手順で作成したファイルを削除しようとすると、この例外が表示されることがあります。ループを使用してファイルを削除し、ファイルが存在するかどうかを確認し、そうであれば10/100msの短い時間待ってから再度削除する必要があります。私たちは3回ループします。これは問題を修正したようです。 – urlreader