使用FileStream写入文件而不使用“使用”
我有一个类成员变量_stream
这是一个FileStream
。这个变量在构造函数中被初始化,并且需要坚持到我完成这个类为止。每当需要将文件写入文件时,我都会有另一个类引发事件。在我的主类中,我有一个执行实际写作的事件处理程序。我试着下面的代码作为this question:使用FileStream写入文件而不使用“使用”
void MyEventHandler(string message)
{
using (_stream)
using (StreamWriter s = new StreamWriter(_stream))
s.WriteLine(message);
}
但是,这并不工作,因为using
处置的我FileStream
之前,我是受够了。我应该做些什么呢?
首先,您显然需要删除using (_stream)
,因为它会直接处理流。
其次,StreamWriter
将也处置流,以及您当前的代码。这个选项有:
-
对于不具备的
StreamWriter
一个using
语句中,但明确的,如果你需要它写入立即文件刷新作家:void MyEventHandler(string message) { var s = new StreamWriter(_stream); s.WriteLine(message); s.Flush(); }
-
使用
StreamWriter
的构造函数,它允许您在处理StreamWriter
时控制流是否关闭:void MyEventHandler(string message) { using (var s = new StreamWriter(_stream, Encoding.UTF8, 1024, true)) { s.WriteLine(message); } }
更改您的代码,以便代替
Stream
,您班级中的字段为TextWriter
(以您想要的任何文件/流初始化为StreamWriter
) - 然后您不需要创建新的在方法中根本不存在StreamWriter
。
由于Servy笔记,自己的类应该实现IDisposable
并在其Dispose
方法的流/写器的处理。
只是省略了using
。
请注意,在这种情况下,定义此方法的类应该实现IDisposable
,它应该在其方法Dispose
中处理该流。这个类的用户应该在using
块中声明它。
请注意,如果您使用(StreamWriter s ...)''StreamWriter'也会尝试处理流... ...当您需要小心混合编写器和原始流时 - 至少在.Flush()'作家完成。 – 2014-12-01 17:26:19
using
用于隐式地处理对象的函数中的局部变量,但是当它是类的成员时,应该在处理类时处理它。
class YourClass : IDisposable
{
....
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_stream.Dispose();
}
}
}
只是不使用它。 – Ahmad 2014-12-01 17:22:01
_stream从哪里来?什么是实际的错误/症状?这个问题不明确,不完整。 – 2014-12-01 17:31:18