【发布时间】:2011-10-05 12:51:12
【问题描述】:
我遇到了一些琐碎的事情,但是当我缓冲的数据达到 FileStream 缓冲区的大小时,数据似乎被刷新到磁盘(从 FileStream 的缓冲区中)。
//use the FileStream buffer to actually buffer the data to be written, so segments are written as desired.
FileStream writeStream = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.None, CommandOperationBufferSize);
BinaryWriter binWriter = new BinaryWriter(writeStream);
byte[] FullSize = new byte[CommandOperationTotalSize];
//the BinaryWriter will flush when the FileStream buffer is hit
binWriter.Write(FullSize); //DATA FLUSHES TO DISK HERE!
//if wait, wait five seconds
if (CommandOperation == "writewait" || CommandOperation == "appendwait")
{
Thread.Sleep(5000);
writeStream.Flush();
Thread.Sleep(5000);
}
writeStream.Close();
writeStream.Dispose();
binWriter.Close();
任何人都可以确认是这种情况吗?当 FileStream 的缓冲区被填满时,FileStream 的缓冲区是实际的 .Flush() 吗?
我之所以问,是因为如果我将 CommandOperationTotalSize 设置为 1MB,并将 CommandOperationBufferSize 设置为 64KB,则当缓冲区填满时,数据会刷新到磁盘。
听起来我回答了我自己的问题,但 FileStream 缓冲区不会溢出似乎很奇怪?但也许 API 开发人员试图变得友善?
谢谢,
马特
【问题讨论】:
-
API developers are trying to be nice:) -
我刚刚和一位 C++ 开发人员交谈过,是的,这就是我的想法。 :)
标签: c# .net stream filestream flush