2012-06-13 3 views
14

Мой код в C# (asp.net MVC)StreamWriter.Write не записывает в файл; исключение не брошено

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

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

Файл создается, но пуст. Никакое исключение не выбрасывается. Я никогда не видел этого раньше, и я застрял здесь; Мне просто нужно написать какой-то отладочный вывод.

Просьба сообщить.

+0

На всякий случай, это помогает людям понять, на каком языке?(предположительно C++ или C#) – akroy

+0

см. отредактированное описание – sarsnake

ответ

6

Использование

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

это лучший ответ - если вы знаете, что выходной контент будет не таким большим .. –

40

StreamWriter буферизуется по умолчанию, то есть он не будет выводиться, пока он не получит Flush() или Close (вызов).

Это можно изменить, установив для этого свойство AutoFlush. В противном случае просто выполните:

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

У меня была эта же проблема - не мог понять, почему он не писал, хотя все было правильно. Не знал о флеше/закрытии. Я думаю, что это лучший ответ в целом. (Я знаю, что это старый) – alykins

4

Ни кратковременно, ни закрыто, ни утилизировано. попробовать это

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

или мои предпочтения

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

альтернатива

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

Попытка закрыть файл или добавить \n к линии, такие как

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

Ya в VB.net это не было нужно, но кажется, что CSharp вам нужен вызов Writer.Flush, чтобы заставить писать. Конечно, Writer.Close() также заставил бы флеш.

Мы можем также установить AutoFlush свойство экземпляра 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. 

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

1

Вам нужно либо закрыть или промывать StreamWriter после окончания написания.

tw.Close(); 

или

tw.Flush(); 

Но лучшая практика, чтобы обернуть выходной код в использовании заявление, поскольку StreamWriter реализует 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(); 
  • Проблема заключается в том когда объект StreamWriter создается со ссылкой на FileStream Object, Объект SW всегда будет ожидать некоторые данные, пока объект SW не будет закрыт.
  • Итак, после использования sw.Close(); Ваш открытый файл будет закрыт и подготовиться к показу Output.