我们使用.NET 4编写了一个用C#编写的日志类。我想添加一个构造函数参数,在构造FileOptions.WriteThrough时可以选择设置FileStream标志。由于这是广泛使用的库代码,我想尽可能少地改变。
现有的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);
}
但我不愿意,除非真的没有更优雅的方式。