Ich lief in etwas Interessantes, wenn ein StreamWriter
mit einem FileStream
mit Text in eine vorhandene Datei in .NET 4.5 (haben keine älteren Frameworks versucht) anzuhängen. Ich habe es auf zwei Arten versucht, eine hat funktioniert und die andere nicht. Ich frage mich, was der Unterschied zwischen den beiden ist.Schreiben in txt-Datei mit Stream und Filestream
Beiden Methoden enthielten den folgenden Code an der Spitze
if (!File.Exists(filepath))
using (File.Create(filepath));
Ich habe die Schöpfung in einer using
Aussage, weil ich durch persönliche Erfahrung gefunden habe, dass es die beste Art und Weise, dass die Anwendung vollständig die Datei schließt, um sicherzustellen, ist .
Nichtarbeitsweise:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
(new StreamWriter(f)).WriteLine("somestring");
Mit dieser Methode nichts endet an die Datei angehängt werden.
Arbeitsweise:
using (FileStream f = new FileStream(filepath, FileMode.Append,FileAccess.Write))
using (StreamWriter s = new StreamWriter(f))
s.WriteLine("somestring");
ich ein bisschen googeln getan haben, ohne recht zu wissen, was zu suchen, und haben nichts informativ. Also, warum ist es so, dass der anonyme StreamWriter
fehlschlägt, wo die (nicht-anonyme? Benannt?) StreamWriter
funktioniert?
Ich nehme an, der 'StreamWriter' schreibt nichts, bis 'flushed' und seine 'Dispose'-Methode, die implizit aufgerufen wird, indem sie mit dem' using'-Block verwendet wird, automatisch löscht. BEARBEITEN: Beachten Sie, dass der 'StreamWriter' eine Eigenschaft besitzt, die dieses Verhalten kontrollieren kann, wenn es automatisch gestartet wird. Flush den Stream, wenn Sie schreiben, was ich vermute, ist 'false' standardmäßig. –
Dies wurde bereits beantwortet, aber warum sollten Sie Code so formatieren? Es ist ungeheuerlich, IMO zu lesen und zu verstehen, sowie ein erhöhtes Risiko bei der Einführung von Fehlern durch einfache Formatierungsfehler. Ich bin ein großer Fan von Zahnspangen - immer! – TheCodeKing
@TheCodeKing Wenn es bereits beantwortet wurde, würde es Ihnen etwas ausmachen, einen Link zur Verfügung zu stellen? Ich habe ehrlich danach gesucht und jede vorgeschlagene Antwort vor dem Posten betrachtet und habe nichts gesehen, was sie beantwortet hat (hauptsächlich wegen meiner Verwendung einer anonymen Funktion.) Außerdem bin ich nicht hier, um Dinge zu diskutieren, die am meisten sind stilistisch und nach Vorliebe. IMO-Code, der mit Klammern bedeckt ist, die tatsächlich nicht benötigt werden, ist schwerer zu lesen. –