【发布时间】:2012-04-05 04:09:17
【问题描述】:
我们有一个使用 .NET 4 用 C# 编写的日志记录类。我想添加一个构造函数参数,在构造 FileStream 时可以选择设置 FileOptions.WriteThrough 标志。由于这是广泛使用的库代码,因此我希望尽可能少地更改。
现有的 FileStream 构造函数调用:
_stream = new FileStream(_filePath, FileMode.Append, FileAccess.Write, FileShare.Read);
问题:
在我们的构造函数中,我添加了一个名为 writeDirectToDisk 的可选 bool 参数。我以为我可以做这样的事情:
var fileOptions = writeDirectToDisk ? FileOptions.WriteThrough : FileOptions.None;
_stream = new FileStream(_filePath, FileMode.Append, FileAccess.Write, FileShare.Read, fileOptions);
但是不,没有这样的超载!除非我遗漏了什么,否则 FileStream 的构造函数唯一可用的重载接受 FileOptions 参数也需要缓冲区大小参数!
我的尝试:
我尝试将缓冲区大小设置为零,希望使用默认缓冲区大小,但不会引发异常。
我在框架中搜索并找不到指定默认缓冲区大小的静态属性或常量。
我的问题:
在这个阶段我并没有特别在意默认缓冲区大小是多少字节。我只想知道如何在尽可能少的代码影响的情况下将 FileOptions 参数添加到构造函数?
我想知道是否有一些我遗漏的常量或静态变量可以用作缓冲区大小参数,或者我是否遗漏了重载,或者确实有一些更聪明的方法可以做到这一点。我还想知道当指定 FileOptions.WriteThrough 时缓冲区大小是否无关紧要,在这种情况下我可以这样做:
if (writeDirectToDisk)
{
_stream = new FileStream(_filePath, FileMode.Append, FileAccess.Write, FileShare.Read, 1, FileOptions.WriteThrough); // 1 is the smallest value allowed, it will actually be 8 bytes
}
else
{
_stream = new FileStream(_filePath, FileMode.Append, FileAccess.Write, FileShare.Read);
}
但我宁愿不这样做,除非真的没有更优雅的方式。
【问题讨论】: