是否可以使用CopyTo方法合并两个(或更多)Streams(或MemoryStreams)?
例如,我有两个源流s1和s2。我正在创建目标MemoryStream:
MemoryStream omDest = new MemoryStream();
如果我复制一个Stream,一切都很好:
s1.CopyTo(omDest);
但如果我同时复制,第二个会覆盖第一个。
感谢您的帮助。
谢谢。
答案 0 :(得分:0)
你可以在CopyTo之后将目标流的位置设置为第一个流的长度,如下所示:
memoryStream1.CopyTo(target);
target.Position = memoryStream1.Length;
memoryStream2.CopyTo(target);
因此,第二个流的复制从指定位置开始
完整代码:
using (MemoryStream target = new MemoryStream(30))
{
using(MemoryStream mem1 = new MemoryStream(new byte[] { 1, 2, 3, 4, 5 }))
{
mem1.CopyTo(target);
target.Position = mem1.Length;
}
using (MemoryStream mem2 = new MemoryStream(new byte[] { 6, 7, 8, 9, 10 }))
{
mem2.CopyTo(target);
}
foreach(byte b in target.ToArray())
{
Console.Write(b+",");
}
}
最诚挚的问候 FLO
修改强>
为了简化您,您还可以使用WriteTo
- 方法,这样您就不需要重置位置。