2012-08-08 11 views
8

アプリケーションはディレクトリにファイルを作成し、ディレクトリ内の何かを実行してからファイルを削除する必要があります。例えば、以下のソースコードは:ファイルを削除するとIOExceptionが発生する

File.Create("textfile.txt"); 
// Do something here 
File.Delete("textfile.txt"); 

「何かが」だけ非常に短い時間を必要とするプロセスである場合、File.Deleteは(ファイルが別のプロセスによって使用されている)IOExceptionをスローします。別のSO投稿:Cannot delete directory with Directory.Delete(path, true)によると、Thread.Sleep(0)を呼び出すと前のプロセスが終了するはずです。ただし、

File.Create("textfile.txt"); 
// Do something here 
Thread.Sleep(0); 
File.Delete("textfile.txt"); 

であっても、同じIOExceptionが引き続き発生します。

私が得た解決策は、削除されるまでファイルを繰り返し削除しようとするwhileループです。しかし、私はtheresがより良い解決策であるかどうか疑問に思います。

+1

非常に速い回答をいただきありがとうございます(MSDN上で指摘していますが、今は非常に明るい気がしていません)。彼が最初だから@usrと一緒に行くつもりです。しかし+1を私の感謝として受け入れてください。 – Jim

答えて

16

File.Createは、そのファイルに対するオープンハンドルを表すFileStreamを返します。その呼び出しの結果をusingブロックにラップして、確定的にハンドルを閉じます。

21

File.Createメソッドはファイルストリームを作成します。このストリームは正しく処理する必要があります。 MSDNのドキュメントで提案されているように、このコードが正確であることを

using(FileStream fs = File.Create("textfile.txt")) 
{ 
    // Do something here. 
} 
File.Delete("textfile.txt"); 

注...

3

File.Createは、そのファイルへのオープンハンドルであるのFileStreamを返します。私は、次のコードを示唆しています。代わりにこれを使用します。

using(FileStream fs = File.Create("textfile.txt")) 
{} 

File.Delete("textfile.txt"); 
4

も注意してください:あなたはファイルに何かを書きたくない場合は、次の2つの方法で「使用」を避けることができます場合は

(1) File.WriteAllText("textfile.txt", string.Empty); 
(2) File.Create("textfile.txt").Dispose(); 

(2)それを作成してから廃棄するまでの間に例外をスローすることはないので、使用を避けることは安全です。

関連する問題