StreamWriter.Flush()StreamWriter.Close()在功能上有什么不同?

当我的数据没有正确写入文件时,我在代码末尾添加了Flush()Close().然而,我意识到添加either Flush()Close()可以正确写入数据.

当我阅读MSDN文档时,我无法准确了解这些方法的具体功能;我只发现其中一个是确保数据正确写入所必需的.如有进一步解释,将不胜感激.


其中s是要编写的字符串,下面是我的代码当前的样子:

StreamWriter sw = File.CreateText("TextOutput.txt");
sw.Write(s);
sw.Flush();
sw.Close();

根据答案的反馈,我已经在using挡路中重写了我的代码,它实现了IDisposable%,并在对象被释放时自动负责将流写入文件:

using (StreamWriter sw = File.CreateText("TextOutput.txt"))
{
    sw.Write(s);
}

推荐答案

在需要清除缓冲区的任何时候都可以调用StreamWriter.Flush(),并且流将保持打开状态.

StreamWriter.Close()用于关闭流,此时缓冲区也被刷新.

但你真的不需要叫这两个.每当我看到.Close()英寸的代码时,我都会把它当成代码的味道,因为这通常意味着意外的异常可能会导致资源处于打开状态.你要做的是在using块中创建StreamWriter变量,如下所示:

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.

.net相关问答推荐

如何处理以用户为中心的CSP现时值?(uc-lock.bundle.js)

.NET发布的应用程序运行与开发不同的端口

C#:如何构造异步/等待代码,其中许多请求是针对相同的、返回缓慢的数据发出的,这可以满足所有请求

.NET MAUI ListView - ObservableCollection - 在异步方法期间不更新

使属性只能通过绑定的 Editor(component) 编辑

C# 中的批量更新

我在哪里可以获得线程安全的 CollectionView?

根源是什么?

将屏幕捕获为位图

从 Web.Config 中的邮箱友好显示名称存储 Smtp

什么是编组?当某些东西被编组时会发生什么?

有什么方法可以在不重新编译的情况下覆盖 .NET Windows 服务名称?

.net 服务总线建议?

ObservableCollection<> 与 List<>

当我们按下 Enter 键时启动的 WPF 文本框命令

如何将 System.Type 转换为其可为空的版本?

无法使用 Unity 将依赖项注入 ASP.NET Web API 控制器

说明 C# 中 volatile 关键字的用法

表单不响应 KeyDown 事件

没有科学记数法的双精度字符串转换