C# 使用FileStream写入文件,而不使用";使用;
我有一个类成员变量C# 使用FileStream写入文件,而不使用";使用;,c#,events,file-io,filestream,using,C#,Events,File Io,Filestream,Using,我有一个类成员变量\u stream,它是文件流。这个变量在构造函数中被初始化,并且需要一直保留,直到我处理完这个类。我有另一个类,它在每次需要将某些内容写入文件时都会引发一个事件。在我的主类中,我有一个执行实际编写的事件处理程序。我在中尝试了以下代码: 但这不起作用,因为使用会在我完成文件流之前处理掉它。我应该怎么做呢?只需使用省略 注意,在这种情况下,定义此方法的类应该实现IDisposable,并且应该在其dispose方法中处理流。此类的用户应该在using块中声明它。首先,您显然需要使
\u stream
,它是文件流
。这个变量在构造函数中被初始化,并且需要一直保留,直到我处理完这个类。我有另一个类,它在每次需要将某些内容写入文件时都会引发一个事件。在我的主类中,我有一个执行实际编写的事件处理程序。我在中尝试了以下代码:
但这不起作用,因为
使用
会在我完成文件流之前处理掉它。我应该怎么做呢?只需使用
省略
注意,在这种情况下,定义此方法的类应该实现IDisposable
,并且应该在其dispose
方法中处理流。此类的用户应该在using
块中声明它。首先,您显然需要使用(_stream)
删除,因为这将直接处理流
其次,StreamWriter
也将使用当前代码处理流。这方面的选择包括:
- 对于
StreamWriter
也没有using
语句,但是如果需要立即将其写入文件,请显式刷新writer:
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);
}
}
- 更改代码,使类中的字段不是
流
,而是一个文本编写器
(对于所需的任何文件/流,它初始化为StreamWriter
),然后根本不需要在方法中创建新的StreamWriter
正如Servy所指出的,您自己的类应该实现IDisposable
,并在其dispose
方法中处置流/写入程序。使用
用于函数中的局部变量,以隐式处置对象,但当对象是类的成员时,您应该在处置该类时处置它
class YourClass : IDisposable
{
....
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_stream.Dispose();
}
}
}
请注意,如果您使用(StreamWriter s…)
,则StreamWriter
也将尝试处理流。。。我们需要小心地混合编写器和原始流-至少在完成编写时是.Flush()
writer。流从何而来?实际的错误/症状是什么?这个问题不清楚,也不完整。
class YourClass : IDisposable
{
....
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
_stream.Dispose();
}
}
}