我的C#代码(asp.net MVC)
StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");
// write a line of text to the file
tw.Write("test");
文件已经被创建,但是为空。没有抛出任何异常。我以前从未见过这种情况,现在卡住了。我只需要写一些调试输出。
请给予建议。
我的C#代码(asp.net MVC)
StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt");
// write a line of text to the file
tw.Write("test");
文件已经被创建,但是为空。没有抛出任何异常。我以前从未见过这种情况,现在卡住了。我只需要写一些调试输出。
请给予建议。
默认情况下,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();
tw.Close();
或者
tw.Flush();
但最佳实践是将输出代码包装在using语句中,因为StreamWriter实现了IDisposable接口:
using (StreamWriter tw = new StreamWriter("C:\\mycode\\myapp\\logs\\log.txt")){
// write a line of text to the file
tw.Write("test");
}
既不刷新也不关闭也不处理。 试试这个。
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();
}
System.IO.File.WriteAllText(@"path\te.txt", "text");
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();
在VB.net中,这是不需要的。但是在CSharp中,似乎需要调用Writer.Flush()来强制进行写入操作。当然,调用Writer.Close()也会强制刷新缓冲区。
我们还可以设置StreamWriter实例的AutoFlush属性:
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/zh-cn/library/system.io.streamwriter.autoflush(v=vs.110).aspx
一种替代方案
FileStream mystream = new FileStream("C:\\mycode\\myapp\\logs\\log.txt",
FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter tw = new StreamWriter(mystream);
tw.WriteLine("test");
tw.close();
\n
。tw.WriteLine("test");
tw.Close();