8

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

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

「何か」が非常に短い時間しか必要としないプロセスである場合、File.DeleteはIOExceptionをスローします(ファイルは別のプロセスによって使用されています)。別のSOの投稿によると、Directory.Delete(path、true)を使用してディレクトリを削除することはできません。Thread.Sleep(0)を呼び出すと、前のプロセスを終了できます。しかし、

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

同じIOExceptionが引き続きスローされます。

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

4

4 に答える 4

21

File.Createメソッドは、ファイルストリームを作成します。これは、正しく破棄する必要があります。次のコードをお勧めします。

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

このコードは、MSDNドキュメントで提案されているとおりであることに注意してください...

于 2012-08-08T10:53:10.287 に答える
16

File.Createそのファイルへのオープンハンドルを表すFileStreamを返します。その呼び出しの結果をusing-blockでラップして、決定論的にハンドルを閉じます。

于 2012-08-08T10:52:13.270 に答える
4

また、注意:ファイルに何も書き込みたくない場合は、次の2つの方法で「使用」を回避できます。

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

(2)の場合、作成と破棄の間に例外をスローする可能性のあることは何もしていないため、使用を避けるのが安全です。

于 2012-08-08T10:59:40.350 に答える
3

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

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

File.Delete("textfile.txt");
于 2012-08-08T10:53:48.100 に答える