Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该在Stream.CopyTo之前使用Stream.Flush吗?_C#_.net_Stream_Memorystream - Fatal编程技术网

C# 我应该在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,因为该操作什么都不做。如果查看源代码,则实现为

我有一个记忆流,我正在使用StreamWriter填充一些数据。 最后,我想将它转储到不同的流(不总是文件)

我应该在使用Steram.CopyTo方法之前调用Stream.Flush吗

我应该在使用Stream.CopyTo方法之前调用Stream.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多行是注释,它们在反射源中丢失)。谢谢。在这种情况下,这将派上用场。