StreamWriter.Write不写入文件; 没有异常抛出

sar*_*ake 19 c# asp.net-mvc file-io streamwriter.write

我在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");
Run Code Online (Sandbox Code Playgroud)

文件已创建但为空.没有异常被抛出.我以前从未见过这个,我被困在这里; 我只需要编写一些调试输出.

请指教.

Ben*_*Cox 53

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();
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的问题-即使一切正确,也无法弄清楚为什么它没有写。不知道冲洗/关闭。我认为这是最好的答案。(我知道这很老了) (2认同)

Ton*_*son 6

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

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

或者我的偏好

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();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

使用

System.IO.File.WriteAllText(@"path\te.txt", "text");
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案 - 如果你知道输出内容不会那么大.. (2认同)

ped*_*iri 5

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

tw.Close();
Run Code Online (Sandbox Code Playgroud)

要么

tw.Flush();
Run Code Online (Sandbox Code Playgroud)

但是最佳实践是将输出代码包装在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");
}
Run Code Online (Sandbox Code Playgroud)