2012-06-13 12 views
14

mojego kodu w języku C# (asp.net MVC)StreamWriter.Write nie zapisuje do pliku; żaden wyjątek rzucony

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

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

Plik jest tworzony, ale jest pusty. Nie jest zgłaszany wyjątek. Nigdy wcześniej tego nie widziałem i utknąłem tutaj; Po prostu muszę napisać wynik debugowania.

Prosimy o radę.

+0

Na wszelki wypadek, gdy pomaga to ludziom uzyskać wgląd w jakim języku?(prawdopodobnie C++ lub C#) – akroy

+0

patrz edytowany opis – sarsnake

Odpowiedz

6

Zastosowanie

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

to jest najlepsza odpowiedź - jeśli wiesz, że zawartość wyjściowa nie będzie tak duża .. –

40

StreamWriter jest buforowane domyślnie, co oznacza, że ​​nie będzie wyjścia, dopóki nie otrzyma Flush() lub Close() wywołanie.

Możesz to zmienić, ustawiając właściwość AutoFlush, jeśli chcesz. W przeciwnym razie wystarczy:

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

Miałem ten sam problem - nie mogłem zrozumieć, dlaczego nie było pisania, mimo że wszystko było poprawne. Nie wiedziałem o spłukaniu/zamknięciu. Myślę, że jest to najlepsza ogólna odpowiedź. (Wiem, że to jest stare) – alykins

4

Ani spłukany, ani zamknięty, ani zbywany. spróbować

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

lub moje preferencje

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

alternatywą

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

Spróbuj zamknąć plik lub dodać \n do linii, takich jak

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

Ya w VB.net nie było to potrzebne, ale wydaje się, że z CSharp potrzebujesz wywołania Writer.Flush, aby wymusić zapis. Oczywiście Writer.Close() również wymusiłby kolor.

Możemy również ustawić AutoFlush obiekt instancji StreamWriter:

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. 

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

1

Trzeba albo zamknąć lub przepłukać StreamWriter po zakończeniu pisania.

tw.Close(); 

lub

tw.Flush(); 

Jednak najlepszym rozwiązaniem jest owinąć kod wyjściowy w użyciu instrukcji, ponieważ StreamWriter implementuje IDisposable:

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(); 
  • Problemem jest to, gdy obiekt StreamWriter jest tworzony z odniesieniem do FileStrea m Obiekt, obiekt SW zawsze będzie oczekiwał pewnych danych, dopóki obiekt SW nie zostanie zamknięty.
  • So Po użyciu sw.Close(); Twój otwarty plik zostanie zamknięty i przygotuje się na wyświetlenie wyjścia.
Powiązane problemy