2012-06-13 4 views
14

Mein Code in C# (asp.net MVC)StreamWriter.Write schreibt nicht in Datei; keine Ausnahme ausgelöst

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt"); 

// write a line of text to the file 
tw.Write("test"); 

Die Datei erstellt wird, ist aber leer. Es wird keine Ausnahme ausgelöst. Ich habe das noch nie zuvor gesehen und ich stecke hier fest; Ich muss nur eine Debugging-Ausgabe schreiben.

Bitte beraten.

+0

Nur für den Fall, dass es Menschen hilft, einen Einblick zu bekommen, welche Sprache?(vermutlich C++ oder C#) – akroy

+0

siehe bearbeitete Beschreibung – sarsnake

Antwort

6

Verwenden

System.IO.File.WriteAllText(@"path\te.txt", "text"); 
+2

das ist die beste Antwort - wenn Sie wissen, dass der Inhalt der Ausgabe wird nicht so groß sein .. –

40

Stream ist standardmäßig gepuffert, was bedeutet, es wird nicht ausgegeben, bis er einen Flush() oder Close() Anruf empfängt.

Sie können dies ändern, indem Sie die Eigenschaft AutoFlush festlegen, wenn Sie möchten. Ansonsten tun Sie einfach:

StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt"); 

// write a line of text to the file 
tw.Write("test"); 
tw.Close(); //or tw.Flush(); 
+1

Ich hatte das gleiche Problem- konnte nicht herausfinden, warum es nicht obwohl geschrieben wurde alles war richtig. Wusste nicht über die Flush/Close. Ich denke, das ist die beste Antwort insgesamt. (Ich weiß, das ist alt) – alykins

4

Weder gespült noch geschlossen noch entsorgt. versuchen diese

using (StreamWriter tw = new StreamWriter(@"C:\mycode\myapp\logs\log.txt")) 
{ 
    // write a line of text to the file 
    tw.Write("test"); 
    tw.Flush(); 
} 

oder meine Vorliebe

using (FileStream fs = new FileStream(@"C:\mycode\myapp\logs\log.txt" 
            , FileMode.OpenOrCreate 
            , FileAccess.ReadWrite)   ) 
{ 
    StreamWriter tw = new StreamWriter(fs); 
    tw.Write("test"); 
    tw.Flush(); 
} 
0

eine Alternative

FileStream mystream = new FileStream("C:\\mycode\\myapp\\logs\\log.txt",  
FileMode.OpenOrCreate, FileAccess.Write);   
StreamWriter tw = new StreamWriter(mystream); 
tw.WriteLine("test"); 
tw.close(); 
0

versuchen, die Datei oder fügen Sie \n an die Leitung wie

tw.WriteLine("test"); 
tw.Close(); 
1

zu schließen Ya in VB.net wurde dies nicht benötigt aber es scheint bei CSharp einen Writer.Flush Aufruf zu benötigen um den Schreibvorgang zu erzwingen. Natürlich würde Writer.Close() auch den Flush erzwingen.

Wir setzen auch die Autoflush Eigentum der Stream Beispiel:

sw.AutoFlush = true; 
// Gets or sets a value indicating whether the StreamWriter 
// will flush its buffer to the underlying stream after every 
// call to StreamWriter.Write. 

Von: http://msdn.microsoft.com/en-us/library/system.io.streamwriter.autoflush(v=vs.110).aspx

1

Sie müssen nach Abschluss schriftlich entweder in der Nähe oder die Streamwriter spülen.

tw.Close(); 

oder

tw.Flush(); 

Aber die beste Praxis ist, den Ausgangscode in einer using-Anweisung zu wickeln, da Stream IDisposable implementiert:

using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){ 
// write a line of text to the file 
tw.Write("test"); 
} 
2
 FileStream fs = new FileStream("d:\\demo.txt", FileMode.CreateNew,    FileAccess.Write); 
     StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.ASCII); 
     int data; 

      sw.Write("HelloWorld"); 

     sw.Close(); 
     fs.Close(); 
  • Das Problem ist, wenn das StreamWriter-Objekt mit Verweis auf FileStrea erstellt wird m Object, SW-Objekt erwartet immer Daten, bis das SW-Objekt geschlossen ist.
  • Also nach der Verwendung sw.Close(); Ihre geöffnete Datei wird geschlossen und bereitet sich auf die Ausgabe vor.
Verwandte Themen