Dies ist nicht wegen File.AppendAllText
sondern diese Codezeile:
File.Create(LogPath);
Per the documentation of File.Create(string):
Rückgabewert
Typ: System.IO.FileStream
Ein FileStream, der Lese-/Schreibzugriff auf die im Pfad angegebene Datei bietet.
Es gibt ein offenes FileStream
Objekt. Sie müssen dieses Objekt entsorgen, um den Stream zu schließen und die Datei freizugeben. Wenn Sie dies nicht tun, hält dieses Objekt die Datei offen, bis GC das Objekt zu einem späteren Zeitpunkt unbestimmt finalisiert.
Hier ist, wie diese Zeile Code zu schreiben, entweder eine der folgenden zwei Alternativen arbeiten:
File.Create(LogPath).Dispose();
using (File.Create(LogPath)) { }
Was passiert ist, dass das zweite Mal, wenn Ihr Programm die Datei lief vorhanden ist, so dass Sie es gelöscht und dann es neu erstellt, aber der "neu erstellt es" Teil hielt die Datei geöffnet, so dass, als es kurze Zeit später die File.AppendAllText
Methode erreichte, die Datei noch geöffnet war.
Hinweis: Wenn Sie immer Anruf File.AppendAllText
Sie können es einfach nur löschen, wie AppendAllText
die Datei erstellen, wenn es nicht bereits vorhanden, wie pro the documentation of File.AppendAllText:
eine Datei öffnet, hängt die angegebene Zeichenfolge an die Datei an und schließt dann die Datei. Wenn die Datei nicht existiert, erstellt diese Methode eine Datei, schreibt die angegebene Zeichenfolge in die Datei und schließt dann die Datei.
(Hervorhebung von mir)
Zwei Instanzen des Programms laufen zur gleichen Zeit? –
ist dies der einzige Code, der die von LogPath angegebene Datei betrifft? Ich hätte einen Fehler mit 'File.Delete (LogPath);' bevor Sie sogar zu 'File.AppendAllText (LogPath, logMessage);'. –