我目前正在使用.NET Compact Framework 3.5中的TextWriter类来将日志条目写入文件。这是一项非常常见且简单的任务,没有任何问题。但是,使用TextWriter并在所有数据被写入后调用Dispose会导致文件保持打开状态。
我的方法是初始化一个FileStream,然后使用创建的FileStream实例创建一个StreamWriter。然后,我使用静态方法Synchronized创建了一个同步的TextWriter。
为了调查为什么在数据被写入和刷新后文件不能被另一个进程访问,我从StreamWriter派生了一个类,并重写了Dispose方法,只是为了看看是否被调用。运行代码后发现重写的Dispose方法没有被调用,这让我感到困惑。
调用代码如下:
var fileStream = new FileStream("\\NAND_FLASH\\test.file", FileMode.OpenOrCreate);
var streamWriter = new ExtendedWriter(fileStream, Encoding.UTF8);
TextWriter textWriter = TextWriter.Synchronized(streamWriter);
textWriter.Dispose();
以下是派生类:
internal class ExtendedWriter : StreamWriter
{
public ExtendedWriter(Stream stream) : base(stream)
{
}
public ExtendedWriter(Stream stream, Encoding encoding) : base(stream, encoding)
{
}
public ExtendedWriter(Stream stream, Encoding encoding, int bufferSize) : base(stream, encoding, bufferSize)
{
}
public ExtendedWriter(string path) : base(path)
{
}
public ExtendedWriter(string path, bool append) : base(path, append)
{
}
public ExtendedWriter(string path, bool append, Encoding encoding) : base(path, append, encoding)
{
}
public ExtendedWriter(string path, bool append, Encoding encoding, int bufferSize) : base(path, append, encoding, bufferSize)
{
}
protected override void Dispose(bool disposing)
{
Trace.WriteLine("Extended writer dispose!");
base.Dispose(disposing);
}
}
有人能向我解释这种行为吗?
编辑: 更新问题文本,我忘了提到我正在使用.NET Compact Framework 3.5。