关于C#WriteLine的问题

2025-04-24 06:44:03
推荐回答(4个)
回答1:

关闭了以后文件才可以保存的

回答2:

using(StreamWriter sw = new StreamWriter(@"f:\1.txt")
{
sw.WriteLine("xxx");
}

回答3:

注意下参考链接中的MSDN资源:
除非显式地调用 Flush 或 Close,否则,刷新流不会刷新其基础编码器。将 AutoFlush 设置为 true 意味着将数据从缓冲区刷新到流中,但不刷新编码器状态。这将允许编码器保持其状态(不完全字符),以便它可以正确地对下一个字符块进行编码。此方案影响 UTF8 和 UTF7,这二者中,某些字符只能在编码器收到相邻的一个或多个字符后才能进行编码。
当 AutoFlush 设置为 false 时, StreamWriter 将对您传入的编码同时在内部和可能的编码器中执行有限的缓冲。只要在使用 StreamWriter 完成写入之后始终调用 Close(或至少 Flush),就可以通过将 AutoFlush 设置为 false 来获得更好的性能。
例如,您在写入设备时,若用户期望立刻得到反馈,则将 AutoFlush 设置为 true。Console.Out 即属于这种情况:内部用于向 Console 写入的 StreamWriter 在您每次调用 StreamWriter.Write 后,都刷新其所有的内部状态,编码器状态除外。

简单来说,如果AutoFlush为True则每次Write就立马写入,否则先放到缓冲区中
显示调用Flush 或 Close也可以让缓冲区的数据刷新。
三个建议:
要么AutoFlush设置为True,如果写入操作多的话不建议这么干,性能不佳,如果想实时更新则推荐这么干
要么调用Flush()方法刷新缓冲区,可以写一部分刷新一部分
再要么调用Close()关闭流的同时刷新缓冲区,这要关闭之后就不能再写入了
使用using(StreamWriter sw = new StreamWriter(@"f:\1.txt")){ ... }实际上也是在Dispose()的同时调用了Close()

就youbl兄和ahcc08兄的回答而言实际上不确切,这里真正的问题在于没有刷新缓冲区,而不在于关闭IO流,关闭IO流可以刷新缓冲区,但是不是根本

回答4:

没有把文件关闭.