何时调用 File.Dispose()
When to call File.Dispose()
我正在尝试使用文本编写器将文本写入 .NET Core 中的文件。以下代码不会向文件输出任何内容:
TextWriter writer = File.CreateText(@"...txt");
writer.Write("Hello World");
但是,这样做:
TextWriter writer = File.CreateText(@"...txt");
writer.Write("Hello World");
writer.Dispose();
这是为什么?这条额外的行告诉程序做什么不同的事情?我不想关闭 TextWriter,因为它将要写入日志,而我的应用程序是 运行,这些日志是 运行 不断且无限期的。
如何在应用程序停止之前保持打开状态运行?
更新
所以我想这样做的原因是我正在使用将其日志写入 TextWriter 的 SDK:
TextWriterLogger(textWriter);
//Creates a logger that writes to a TextWriter. User is responsible for providing an instance of TextWriter that is thread safe.
但是如果我只是将其包含在 using 语句中,则不会写入日志,因为当它们准备好写入时,using 语句将已执行并且 TextWriter 已被释放。
谢谢
Dispose
调用 Flush
,将缓冲区中存储的内部字节写入磁盘
如果不关闭或处置文件,您将留下非托管资源并可能锁定文件,更不用说内存泄漏了。而是始终使用 using
语句
using (TextWriter writer = File.CreateText(@"...txt"))
{
writer.Write("Hello World");
}
但是如果你想连续写入文件,你将不得不刷新它
Clears buffers for this stream and causes any buffered data to be
written to the file.
TextWriter writer = File.CreateText(@"...txt");
...
writer.Write("Hello World");
...
writer.Flush(); // at this point the bytes are flushed to disk
...
...
writer.Dispose();
简而言之,大多数流都由内部数组(缓冲区)支持,因此您不会影响写入。默认大小为 4k,当它达到缓冲区大小时会自动刷新。如果你想看到立即写入,你必须每次都刷新它
最后一些流具有自动刷新功能,可以为您完成这项工作
Gets or sets a value indicating whether the StreamWriter will flush
its buffer to the underlying stream after every call to Write(Char)
当你完成流后 总是 处理它
我正在尝试使用文本编写器将文本写入 .NET Core 中的文件。以下代码不会向文件输出任何内容:
TextWriter writer = File.CreateText(@"...txt");
writer.Write("Hello World");
但是,这样做:
TextWriter writer = File.CreateText(@"...txt");
writer.Write("Hello World");
writer.Dispose();
这是为什么?这条额外的行告诉程序做什么不同的事情?我不想关闭 TextWriter,因为它将要写入日志,而我的应用程序是 运行,这些日志是 运行 不断且无限期的。
如何在应用程序停止之前保持打开状态运行?
更新
所以我想这样做的原因是我正在使用将其日志写入 TextWriter 的 SDK:
TextWriterLogger(textWriter);
//Creates a logger that writes to a TextWriter. User is responsible for providing an instance of TextWriter that is thread safe.
但是如果我只是将其包含在 using 语句中,则不会写入日志,因为当它们准备好写入时,using 语句将已执行并且 TextWriter 已被释放。
谢谢
Dispose
调用 Flush
,将缓冲区中存储的内部字节写入磁盘
如果不关闭或处置文件,您将留下非托管资源并可能锁定文件,更不用说内存泄漏了。而是始终使用 using
语句
using (TextWriter writer = File.CreateText(@"...txt"))
{
writer.Write("Hello World");
}
但是如果你想连续写入文件,你将不得不刷新它
Clears buffers for this stream and causes any buffered data to be written to the file.
TextWriter writer = File.CreateText(@"...txt");
...
writer.Write("Hello World");
...
writer.Flush(); // at this point the bytes are flushed to disk
...
...
writer.Dispose();
简而言之,大多数流都由内部数组(缓冲区)支持,因此您不会影响写入。默认大小为 4k,当它达到缓冲区大小时会自动刷新。如果你想看到立即写入,你必须每次都刷新它
最后一些流具有自动刷新功能,可以为您完成这项工作
Gets or sets a value indicating whether the StreamWriter will flush its buffer to the underlying stream after every call to Write(Char)
当你完成流后 总是 处理它