2017-12-02 3 views
1

Ich habe eine Multithreading-Anwendung, die in die gleiche Datei auf einem bestimmten Ereignis schreiben. Wie kann ich die Datei sperren und den Thread warten, bis es kostenlos ist? ich kann nicht FileStream verwenden, da es außer auf dem anderen Threads werfen (kann nicht acces)C# mehrere Threads in die gleiche Datei schreiben

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

ist es eine richtige Art und Weise, dies zu tun?

+0

möglich Duplikat [Schreib in einer einzigen Datei mit mehreren Threads] (https://stackoverflow.com/questions/8035029/how-to-write-in-a-single-file-with-multiple -threads) – Tcraft

Antwort

0

Sie benötigen einen thread-sicheren Dateimanager, um Threads zu verwalten. Sie können ReaderWriterLockSlim verwenden, um es auszuführen.

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(); 
     } 
    } 
} 

Beispiel;

Parallel.For(0, 100, new ParallelOptions { MaxDegreeOfParallelism = 10 },i => 
{ 
    new FileWriter().WriteData("Sample Data", Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"SampleFile.txt")); 
}); 
Verwandte Themen