2017-12-02 15 views
1

私は、特定のイベントで同じファイルに書き込むマルチスレッドアプリケーションを持っています。 ファイルをロックしてスレッドが空き状態になるまで待ちますか?それは他のスレッド(することができませんACCES)同じファイルに複数のスレッドを書き込む

FileStream fileStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); 

に例外がスローされますので、 私はこれを行うには、任意の適切な方法があるFileStreamを使用することはできませんか?

+0

可能重複https://stackoverflow.com/questions/8035029/how-to-write-in-a-single-file-with-multiple - スレッド) – Tcraft

答えて

0

スレッドを管理するには、スレッドセーフなファイルライターが必要です。 ReaderWriterLockSlimを使用して実行することができます。

public class FileWriter 
{ 
    private static ReaderWriterLockSlim lock_ = new ReaderWriterLockSlim(); 
    public void WriteData(string dataWh,string filePath) 
    { 
     lock_.EnterWriteLock(); 
     try 
     { 
      using (var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
      { 
       byte[] dataAsByteArray = new UTF8Encoding(true).GetBytes(dataWh); 
       fs.Write(dataAsByteArray, 0, dataWh.Length); 
      } 
     } 
     finally 
     { 
      lock_.ExitWriteLock(); 
     } 
    } 
} 

例;

Parallel.For(0, 100, new ParallelOptions { MaxDegreeOfParallelism = 10 },i => 
{ 
    new FileWriter().WriteData("Sample Data", Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"SampleFile.txt")); 
}); 
[複数のスレッドを持つ単一のファイルに書き込み(の
関連する問題