Mit dem folgenden Dateilesecode:Wenn in C# 2 Prozesse in derselben Datei lesen und schreiben, was ist der beste Weg, Prozesssperrausnahmen zu vermeiden?
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (TextReader tr = new StreamReader(fileStream))
{
string fileContents = tr.ReadToEnd();
}
}
und dem folgenden Datei schreibt Code:
using (TextWriter tw = new StreamWriter(fileName))
{
tw.Write(fileContents);
tw.Close();
}
Folgende Ausnahme Details sind zu sehen:
Der Prozess kann nicht auf die Datei zugreifen kann 'c: \ temp \ myfile.txt', weil es von einem anderen Prozess verwendet wird.
Was ist der beste Weg, dies zu vermeiden? Muss der Leser nach Erhalt der Ausnahme erneut versuchen oder gibt es einen besseren Weg?
Beachten Sie, dass der Leserprozess einen FileSystemWatcher verwendet, um zu wissen, wann die Datei geändert wurde.
Beachten Sie auch, dass ich in diesem Fall bin nicht Suche nach alternativen Möglichkeiten der Teilung von Zeichenfolgen zwischen den 2 Prozessen.
Aber in diesem Fall, wenn ich die Funktionsweise richtig verstehe, könnten Sie eine unvollständige Datei lesen? –
Das stimmt, ja. Das wird immer der Fall sein, wenn Sie mehr als einem Verbraucher erlauben, auf die Datei zuzugreifen. Die einzige Möglichkeit, dies zu erreichen und zu synchronisieren, ist entweder eine Sperrdatei zu verwenden oder die Zugriffsausnahme abzufangen und es erneut zu versuchen, bis Sie exklusiven Zugriff erhalten. –
Ich bin ein wenig verwirrt, weil dies der akzeptierten Antwort auf diese Frage zu widersprechen scheint: http://stackoverflow.com/questions/25097773/system-io-filestream-fileaccess-vs-fileshare, weil es das für FileAcces.ReadWrite angibt Sie müssen FileShare.None verwenden. – user2481095