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