3 Stimmen

Textdatei wiederholt / gleichzeitig lesen / schreiben

Wie kann ich eine Textdatei lesen und schreiben, ohne die Ausnahme "Datei wird bereits von einer anderen Anwendung verwendet" zu erhalten?

Ich habe die Funktionen File.readalltext() und File.Appendalltext() ausprobiert Ich fange gerade erst mit filestream an.

Was würde sich in meinem Fall am besten eignen? Ich würde mich auch über einige Codeschnipsel freuen.

Danke

7voto

Rob Levine Punkte 38688

Dies hat alles mit der Sperre und der Freigabesemantik zu tun, die Sie beim Öffnen der Datei anfordern.

Anstatt die Abkürzung zu wählen File.ReadAllText() versuchen Sie die Verwendung eines System.IO.FileStream y un System.IO.StreamReader / System.IO.StreamWriter .

So öffnen Sie eine Datei:

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var streamReader = new StreamReader(fileStream))
{
  var someText = streamReader.ReadToEnd();
}

Beachten Sie die FileShare.ReadWrite - Damit wird der Stream angewiesen, die Weitergabe an andere Leser oder Autoren zu erlauben.

Versuchen Sie zum Schreiben etwas wie

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read))
using (var streamWriter = new StreamWriter(fileStream))
{
  streamWriter.WriteLine("some text");
}

Beachten Sie die FileShare.Read - Damit wird dem Stream mitgeteilt, dass die Freigabe nur für Leser möglich ist.

Schauen Sie sich die System.IO.FileStream und seine Konstruktorüberladungen, und Sie können genau festlegen, wie es sich verhält, um Ihren Zweck zu erfüllen.

1voto

Oded Punkte 475566

Sie müssen sicherstellen, dass die Datei nicht von einer anderen Anwendung verwendet wird.

Mit Ihrer eigenen Anwendung können Sie nicht mehrmals aus einer Datei lesen, ohne den Stream zwischen den Lesevorgängen zu schließen.

Das müssen Sie herausfinden warum die Datei in Gebrauch ist - ein Werkzeug wie FileMon kann helfen, das herauszufinden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X