C# 我应该在Stream.CopyTo之前使用Stream.Flush吗?
我有一个记忆流,我正在使用StreamWriter填充一些数据。 最后,我想将它转储到不同的流(不总是文件) 我应该在使用Steram.CopyTo方法之前调用Stream.Flush吗 我应该在使用Stream.CopyTo方法之前调用Stream.Flush吗 不,不需要调用C# 我应该在Stream.CopyTo之前使用Stream.Flush吗?,c#,.net,stream,memorystream,C#,.net,Stream,Memorystream,我有一个记忆流,我正在使用StreamWriter填充一些数据。 最后,我想将它转储到不同的流(不总是文件) 我应该在使用Steram.CopyTo方法之前调用Stream.Flush吗 我应该在使用Stream.CopyTo方法之前调用Stream.Flush吗 不,不需要调用Flush。但是,您需要在内存流上将位置重置为0 CopyTo文档说: 复制从当前流中的当前位置开始,复制操作完成后不会重置目标流的位置 您永远不需要对内存流调用Flush,因为该操作什么都不做。如果查看源代码,则实现为
Flush
。但是,您需要在内存流
上将位置
重置为0
CopyTo
文档说:
复制从当前流中的当前位置开始,复制操作完成后不会重置目标流的位置
您永远不需要对内存流调用
Flush
,因为该操作什么都不做。如果查看源代码,则实现为空。您确实需要在写入后倒带流
但是,您需要刷新StreamWriter
,以确保在开始复制之前将所有数据推入内存流
您可以将此模式与StreamWriter
写入内存流一起使用,以避免显式刷新:
MemoryStream memStream = ...
using (StreamWriter wr = new StreamWriter(memStream)) {
... // Do the writing
}
memStream.Position = 0; // Rewind
// At this point `memStream` has all data pushed into it,
// and is positioned at zero, so it's ready to be copied.
这个问题的原因是什么?你能详细说明你试图解决的问题吗?如果这是一个好奇的问题,那么不,您不必在对任一流使用CopyTo之前刷新当前数据。谢谢。你在哪里检查MemoryStream.Flush()的源代码?@Hooch我在网上找到了反射源代码。向下滚动或搜索以查看代码(前250多行是注释,它们在反射源中丢失)。谢谢。在这种情况下,这将派上用场。