次を使用してtxtファイルを空にします:
System.IO.File.WriteAllText(path, string.Empty);
一度に多くのスレッドを実行し、同時にファイルにアクセスしようとすると問題が発生します..
簡単な修正に関するアイデアはありますか?:)
救助へのマルチスレッド!
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
おそらく調べる必要がありますFileStream
。あなたがここでやろうとしていることの良い例があります。
私が検討するもう 1 つの方法は、単一のライター スレッドをキューで処理することです。ファイルに書き込みたい他のすべてのスレッドは、テキスト項目をキューの最後に追加することによってこれを行います。ライター スレッドは、キューの先頭からテキスト項目を削除し、ファイルに書き込みます。lock ステートメントを使用してキュー オブジェクトへのアクセスを同期し、AutoResetEvent オブジェクトを使用してライター スレッドに信号を送り、キューに何かを追加すると、キューに何か処理するものがあることを知らせます。