Es scheint, dass das Problem ist, dass eine Art von File.Exists()
Überprüfung intern erfolgt, die fehlschlägt, wenn die Datei ausgeblendet ist (z. B. versucht, eine FileMode.Create
für eine Datei, die bereits existiert).
Verwenden Sie daher FileMode.OpenOrCreate
um sicherzustellen, dass die Datei geöffnet oder erstellt wird, auch wenn es ausgeblendet ist, oder nur FileMode.Open
, wenn Sie es nicht erstellen möchten, wenn es nicht vorhanden ist.
Wenn FileMode.OpenOrCreate
zwar verwendet wird, wird die Datei nicht abgeschnitten, daher sollten Sie ihre Länge am Ende einstellen, um sicherzustellen, dass nach dem Ende des Textes kein Rest übrig bleibt.
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs)) {
// Write your data here...
tw.WriteLine("foo");
// Flush the writer in order to get a correct stream position for truncating
tw.Flush();
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}
}
Wenn Sie .NET 4 verwenden.5 oder später, gibt es eine neue Überlastung, die die Beseitigung der StreamWriter
verhindert auch den zugrunde liegenden Strom zu entsorgen. Der Code könnte dann wie folgt slighly intuitiver geschrieben werden:
using (FileStream fs = new FileStream(filename, FileMode.Open)) {
using (TextWriter tw = new StreamWriter(fs, Encoding.UTF8, 1024, false)) {
// Write your data here...
tw.WriteLine("foo");
}
// Set the stream length to the current position in order to truncate leftover text
fs.SetLength(fs.Position);
}
Welche Ausnahme? – tadman
Was ist die Ausnahme, die es wirft? –
Welche Ausnahme wirft es? – Seth