我们有一个用于记录日志的C#类,使用的是.NET 4。我想添加一个构造函数参数,该参数在构造FileStream时,可以选择设置FileOptions.WriteThrough标志。由于这是广泛使用的库代码,因此我希望尽可能少地进行更改。
现有的FileStream构造函数调用:
问题:
在我们的构造函数中,我添加了一个名为writeDirectToDisk的可选布尔参数。我认为我可以这样做:
但是,实际上没有这样的重载!除非我漏掉了什么,否则 FileStream 构造函数接受 FileOptions 参数的唯一可用重载还需要缓冲区大小参数!
我尝试将缓冲区大小设置为零,希望它会使用默认缓冲区大小,但是它抛出了一个异常。
我搜索了一些框架中的静态属性或常量,但找不到指定默认缓冲区大小的内容。
我的问题是:当前阶段,我并不特别关心默认缓冲区大小是多少字节。我只想知道如何在构造函数中添加 FileOptions 参数,并使代码影响最小?
我想知道是否有某个常量或静态变量可以用作缓冲区大小参数,或者我是否错过了某个重载或者是否有更聪明的方法来解决这个问题。我也想知道如果指定了 FileOptions.WriteThrough,则缓冲区大小是否无关紧要,如果是这种情况,我可以这样做:
_stream = new FileStream(_filePath, FileMode.Append, FileAccess.Write, FileShare.Read);
问题:
在我们的构造函数中,我添加了一个名为writeDirectToDisk的可选布尔参数。我认为我可以这样做:
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);
}
但我宁愿不这样做,除非真的没有更优雅的方法。