Ich möchte eine TXT-Datei erstellen und in diese schreiben. Wenn die Datei bereits vorhanden ist, möchte ich nur noch einige Zeilen anhängen:
string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The very first line!");
tw.Close();
}
else if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The next line!");
tw.Close();
}
Aber die erste Zeile scheint immer überschrieben zu werden ... wie kann ich vermeiden, in derselben Zeile zu schreiben (ich verwende dies in einer Schleife)?
Ich weiß, dass es eine ziemlich einfache Sache ist, aber ich habe die WriteLine
Methode noch nie benutzt . Ich bin völlig neu in C #.
c#
text-files
Berker Yüceer
quelle
quelle
if (file exists) { open file }
ist fast immer in allen Programmiersprachen falsch! Für .NET besteht die Lösung darin,File.Open(path, FileMode.Append, FileAccess.ReadWrite)
mit entsprechenden Flags zu verwenden.File.Open
intern an eine WinAPI-Funktion delegiert wird (siehe nächster Kommentar), um hoffentlich die Rennbedingung zu verhindern. Die meisten Lösungen hier tun dies nicht und unterliegen offensichtlich den Rennbedingungen.Antworten:
Verwenden Sie den richtigen Konstruktor :
quelle
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
und überprüfen Sie lieber die Dateigröße über diesen zurückgegebenen Stream.Siehe auch File.AppendAllText (). AppendAllLines fügt jeder Zeile eine neue Zeile hinzu, ohne sie selbst dort einfügen zu müssen.
Beide Methoden erstellen die Datei, wenn sie nicht vorhanden ist, sodass Sie dies nicht tun müssen.
quelle
quelle
Close()
von einerusing
Anweisung aus aufzurufen , da alle Ressourcen geschlossen werden, bevor sie automatisch entsorgt werden.Sie müssen nicht überprüfen, ob die Datei vorhanden ist, da StreamWriter dies für Sie erledigt. Wenn Sie es im Append-Modus öffnen, wird die Datei erstellt, wenn sie nicht vorhanden ist. Dann werden Sie immer anhängen und niemals überschreiben. Ihre erste Prüfung ist also überflüssig.
quelle
File.AppendAllText fügt einer Datei eine Zeichenfolge hinzu. Es wird auch eine Textdatei erstellt, wenn die Datei nicht vorhanden ist. Wenn Sie keine Inhalte lesen müssen, ist dies sehr effizient. Der Anwendungsfall ist die Protokollierung.
quelle
Sie möchten die Datei nur im "Anhängen" -Modus öffnen.
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
quelle
Wenn Sie StreamWriter starten, wird der Text überschrieben, der zuvor vorhanden war. Sie können die Eigenschaft append wie folgt verwenden:
quelle
quelle
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
und überprüfen Sie lieber die Dateigröße über diesen zurückgegebenen Stream.Sie können einen FileStream verwenden. Dies erledigt die ganze Arbeit für Sie.
http://www.csharp-examples.net/filestream-open-file/
quelle
Versuche dies.
quelle
File.AppendText(path)
, und damit keine Notwendigkeit zu überprüfenFile.Exists(path)
. UndIf (not A) Else If (A)
ist ein komisches Wenn / Sonst. Grundsätzlich gibt es in dieser Frage nichts Gutes, keinen Erklärungscode, der eine redundante Version einer anderen Antwort ist.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
und überprüfen Sie lieber die Dateigröße über diesen zurückgegebenen Stream.Sie können einfach die File.AppendAllText () -Methode verwenden, um Ihr Problem zu lösen. Diese Methode kümmert sich um die Dateierstellung, falls nicht verfügbar, und öffnet und schließt die Datei.
quelle
In der Microsoft-Dokumentation können Sie Dateien erstellen, falls diese nicht vorhanden sind, und sie in einem einzigen Aufruf anhängen. File.AppendAllText-Methode (String, String)
.NET Framework (aktuelle Version) Andere Versionen
Öffnet eine Datei, hängt die angegebene Zeichenfolge an die Datei an und schließt die Datei. Wenn die Datei nicht vorhanden ist, erstellt diese Methode eine Datei, schreibt die angegebene Zeichenfolge in die Datei und schließt die Datei. Namespace: System.IO Assembly: mscorlib (in mscorlib.dll)
Syntax C # C ++ F # VB public static void AppendAllText (Zeichenfolgenpfad, Zeichenfolgeninhalt) Parameterpfad Typ: System.String Die Datei, an die die angegebene Zeichenfolge angehängt werden soll. Inhaltstyp: System.String Die Zeichenfolge, die an die Datei angehängt werden soll.
AppendAllText
quelle
quelle