C# 如何在foreach循环中附加到memoryStream而不覆盖它';什么内容?

C# 如何在foreach循环中附加到memoryStream而不覆盖它';什么内容?,c#,stream,memorystream,C#,Stream,Memorystream,我目前正在进行返回MemoryStream对象的api调用。我在迭代for循环和使用copyTo方法将内存流附加到另一个时遇到问题。它覆盖了流中已经存在的内容 到目前为止,我尝试了几乎所有堆栈溢出答案的组合,但都没有得到正确的结果 MemoryStream docStream2 = new MemoryStream(); MemoryStream docStream3 = new MemoryStream();

我目前正在进行返回MemoryStream对象的api调用。我在迭代for循环和使用copyTo方法将内存流附加到另一个时遇到问题。它覆盖了流中已经存在的内容

到目前为止,我尝试了几乎所有堆栈溢出答案的组合,但都没有得到正确的结果

                MemoryStream docStream2 = new MemoryStream();
                MemoryStream docStream3 = new MemoryStream();

                docStream = (MemoryStream)ApiCall
                docStream2 = (MemoryStream)ApiCall
                docStream3 = (MemoryStream)ApiCall

                docStream.Position = 0;
                docStream2.Position = 0;
                docStream2.CopyTo(docStream);
                docStream.Position = docStream.Length;
                docStream3.Position = 0;
                docStream3.CopyTo(docStream);

                return docStream

我希望得到一个包含每个docStream memoryStream对象所有内容的流。相反,我只得到最后一条流。我还想过制作一个流列表,但我还没有找到一种方法将一个流列表从webapi2返回到mvc4应用程序,但这是一个次要问题。提前谢谢

Id使用,因为您不需要担心读取流的位置

知道了这一点,您所需要做的就是确保结果流的位置是您想要的位置(结束)

考虑一下这个测试应用程序

// Create some data
var stuff = Enumerable.Range(0, 15)
                        .Select(x => (byte)x)
                        .ToArray();

// Create some streams
var ms1 = new MemoryStream();
var ms2 = new MemoryStream();
var ms3 = new MemoryStream();

// write some data to the streams for a test
ms1.Write(stuff, 0, 5);
ms2.Write(stuff, 5, 5);
ms3.Write(stuff, 10, 5);

// make sure we are at the end of the result stream
ms1.Seek(0, SeekOrigin.End);

// write the other streams to the result
ms2.WriteTo(ms1);
ms3.WriteTo(ms1);

// test its working
Console.WriteLine(string.Join(", ", ms1.ToArray()));
输出

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14

假设
docStream
为空,则无需移动其位置:当
CopyTo
它时,当前位置将设置为流的末尾。但是当您开始复制其他流的内容时,
docStream
需要为空。因此,使用全新的
MemoryStream
,您的代码将按原样工作。