是否可以使用CopyTo方法合并两个流?

时间:2016-10-26 18:53:11

标签: merge stream memorystream

是否可以使用CopyTo方法合并两个(或更多)Streams(或MemoryStreams)?

例如,我有两个源流s1和s2。我正在创建目标MemoryStream:

MemoryStream omDest = new MemoryStream();

如果我复制一个Stream,一切都很好:

s1.CopyTo(omDest);

但如果我同时复制,第二个会覆盖第一个。

感谢您的帮助。

谢谢。

1 个答案:

答案 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 - 方法,这样您就不需要重置位置。