0

次を使用してtxtファイルを空にします:

System.IO.File.WriteAllText(path, string.Empty);

一度に多くのスレッドを実行し、同時にファイルにアクセスしようとすると問題が発生します..

簡単な修正に関するアイデアはありますか?:)

4

3 に答える 3

1

救助へのマルチスレッド!

Monitorファイル全体へのアクセスを同期するには、 、AutoResetEventまたはlockブロック (実際にはモニター) を使用する必要があります。

public class SomeClass
{
     private readonly static object _sync = new object(); 

     public void WriteAllText()
     {
          lock(_sync)
          {
               File.WriteAllText("myfile.txt", "Hello world from a synchronized file access!!!");
          }
     }
}

}

このようにして、複数のスレッドが同時に同じファイルにアクセスするのを防ぎます。

lockブロックについては、こちらをご覧ください:

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.110).aspx

于 2012-11-27T11:10:06.417 に答える
0

おそらく調べる必要がありますFileStreamあなたがここでやろうとしていることの良い例があります。

于 2012-11-27T11:04:18.443 に答える
0

私が検討するもう 1 つの方法は、単一のライター スレッドをキューで処理することです。ファイルに書き込みたい他のすべてのスレッドは、テキスト項目をキューの最後に追加することによってこれを行います。ライター スレッドは、キューの先頭からテキスト項目を削除し、ファイルに書き込みます。lock ステートメントを使用してキュー オブジェクトへのアクセスを同期し、AutoResetEvent オブジェクトを使用してライター スレッドに信号を送り、キューに何かを追加すると、キューに何か処理するものがあることを知らせます。

于 2012-11-27T11:15:35.603 に答える