我目前正在使用 .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