StreamWriter.Write 不会写入文件;没有引发异常

本文关键字:异常 文件 Write StreamWriter | 更新日期: 2023-09-27 18:37:10

我的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.Write 不会写入文件;没有引发异常

默认情况下,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();

完成写入后,您需要关闭或刷新 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");
}

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

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();
  • 问题是当引用FileStream对象创建StreamWriter对象时,SW对象将始终需要一些数据,直到SW对象关闭。
  • 所以在使用 sw 之后。关闭();您打开的文件将关闭并准备显示输出。

Ya 在 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

另一种选择

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();