web-dev-qa-db-ja.com

別のプロセスで使用されているファイルを削除するにはどうすればよいですか?

ファイルを削除しようとすると、次の例外が発生します。

別のプロセスによって使用されているため、プロセスはファイル ''にアクセスできません。

私のコードは次のようになります:

string[] files = Directory.GetFiles(@"C:\SEDocumentConverter\SOURCE");
foreach (string file in files)
{               
   File.Delete(file);
}

どうすればこの問題を解決できますか?

9

現在別のプロセスで使用されているファイルを削除する方法はありません。ファイルを削除する前に、まずそのファイルを開いているプログラムをすべて閉じる必要があります。

どのプログラムであるかがまだわからない場合は、 Handle または Process Explorer を使用して把握できます。

7
Cody Gray

Windows MoveFileEx 関数をP/Invokeし、宛先名がNULLのMOVEFILE_DELAY_UNTIL_REBOOTフラグを使用できます。これにより、再起動時にファイルが削除されます。

4
Polyfun

ファイルが使用されている場合は、ファイルを削除しようとしても運が悪いです。コードに基づいて、ファイルを使用している可能性のあるプロセスを特定することはできませんが、 ここ または ここ または ここ を探してみてください、またはこの問題に関するガイダンスとしてこの質問に関連するものとして表示されるその他の質問の場合は、必ず@CodyGrayのProcessExplorerの使用に関するガイダンスに従ってください。

0
Zann Anderson

もう1つの方法は、ファイルに対して開いているすべてのハンドルを見つけて、それらを強制的に閉じることです。

ファイルを使用していたアプリには適していません。

SysInternalsProcessExplorerを使用してUIでそれを試すことができます。

0
hypersw

トピックから少し外れています:しかし、コードから、フォルダのすべてのファイルを削除しようとしているようです。それらを1つずつ削除する代わりに、pathという名前の文字列に含まれているディレクトリを削除する別のメソッドDirectory.Delete(path、True)があります。次に、必要に応じてディレクトリを再作成できます。しかし、あなたの問題はここでも続くかもしれません。

0
user604243