如果我写这样的话,我不确定是否需要在使用过的对象上调用Flush()
:
using (FileStream...)
using (CryptoStream...)
using (BinaryWriter...)
{
// do something
}
它们是否总是自动刷新? using
语句何时刷新它们以及何时不刷新(如果可能发生)?
答案 0 :(得分:48)
一旦离开使用区块的范围,流就会关闭并处理掉。 Close()调用Flush(),因此您不需要手动调用它。
答案 1 :(得分:-2)
它有所不同,Stream
默认情况下不会在Flush()
方法中调用Dispose
,但有一些例外情况,例如FileStream
。原因是某些流对象不需要调用Flush
,因为它们不使用缓冲区。一些(例如MemoryStream
)明确覆盖该方法以确保不采取任何操作(使其成为无操作)。
这意味着如果您不想在那里进行额外的调用,那么您应该检查您使用的Stream
子类是否在Dispose
方法中实现调用,以及它是否是必要与否。
无论如何,为了可读性而无论如何都要打电话是一个好主意 - 类似于某些人在使用语句结束时调用Close()
的方式:
using (FileStream fS = new FileStream(params))
using (CryptoStream cS = new CryptoStream(params))
using (BinaryWriter bW = new BinaryWriter(params))
{
doStuff();
//from here it's just readability/assurance that things are properly flushed.
bW.Flush();
bW.Close();
cS.Flush();
cS.Close();
fS.Flush();
fS.Close();
}