StreamWriter.Flush()和之间的功能有什么区别StreamWriter.Close()?
当我的数据不能被正确地写入一个文件,我既增加Flush()和Close()对我的代码的结束.然而,我意识到,添加任一 Flush()或Close()所允许的数据被正确写入.
当我阅读MSDN文档时,我无法准确了解每种方法的作用; 我只想到确保正确写入数据所需的一个或另一个.任何进一步的解释将不胜感激.
s要写入的字符串在哪里,这是我的代码当前的样子:
StreamWriter sw = File.CreateText("TextOutput.txt");
sw.Write(s);
sw.Flush();
sw.Close();
Run Code Online (Sandbox Code Playgroud)
根据答案的反馈,我在一个using块中重写了我的代码,该块实现IDisposable并将自动处理在处理对象时将流写入文件:
using (StreamWriter sw = File.CreateText("TextOutput.txt"))
{
sw.Write(s);
}
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 112
StreamWriter.Flush() 可以在需要清除缓冲区时调用,并且流将保持打开状态.
StreamWriter.Close() 用于关闭流,此时缓冲区也被刷新.
但你真的不需要打电话给其中任何一个.每当我.Close()在代码中看到代码时,我都会将其视为代码气味,因为它通常意味着意外异常可能导致资源保持打开状态.你应该做的是StreamWriter在using块中创建你的变量,如下所示:
using (var writer = new StreamWriter("somefilepath.txt"))
{
// write a bunch of stuff here
} // the streamwriter WILL be closed and flushed here, even if an exception is thrown.
Run Code Online (Sandbox Code Playgroud)
Jus*_*ner 15
StreamWriter.Flush()将Stream中的任何内容刷新到文件中.这可以在使用Stream的过程中完成,您可以继续编写.
StreamWriter.Close()关闭Stream进行写作.这包括最后一次刷新流.
尽管如此,还是有更好的方法.自StreamWriter实现以来IDisposable,您可以将StreamWriter包装在一个using块中.
using(StreamWriter sw = new StreamWriter(stream))
{
// Work with things here
}
Run Code Online (Sandbox Code Playgroud)
在using阻止之后,Dispose将被调用...将为您冲洗和关闭流.
我有一个案例,我在一个带有底层MemoryStream的StreamWriter上写了一个非常长的字符串.在编写器和流处理之前,MemoryStream被其他东西占用.
using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream , Encoding.UTF8))
{
streamWriter.Write(someRealyLongStringValue);
DoSomethingWithTheStream(memoryStream );
}
Run Code Online (Sandbox Code Playgroud)
对于非常长的字符串,字符串的末尾被截断.这是通过在使用流之前调用flush来解决的.或者,我可以将AutoFlush设置为true.
| 归档时间: |
|
| 查看次数: |
71693 次 |
| 最近记录: |