23

我在 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");

该文件已创建但为空。不会抛出异常。我以前从未见过这种情况,我被困在这里;我只需要写一些调试输出。

请指教。

4

8 回答 8

67

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();
于 2012-06-13T21:59:04.040 回答
7

既不冲洗也不关闭或处置。试试这个

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();
}
于 2012-06-13T22:05:02.513 回答
7

完成写入后,您需要关闭或刷新 StreamWriter。

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");
}
于 2015-11-11T19:07:36.733 回答
5

采用

System.IO.File.WriteAllText(@"path\te.txt", "text");
于 2012-06-13T21:58:56.913 回答
3
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 对象创建时,SW 对象将一直期待一些数据,直到 SW 对象关闭。
  • 所以在使用sw.Close(); 您打开的文件将被关闭并准备好显示输出。
于 2016-02-10T13:30:18.063 回答
2

在 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/en-us/library/system.io.streamwriter.autoflush (v=vs.110).aspx

于 2014-03-21T04:01:37.453 回答
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();
于 2012-06-13T22:05:56.970 回答
0

尝试关闭文件或添加\n到该行,例如

tw.WriteLine("test");
tw.Close();
于 2012-06-13T22:06:52.013 回答