【问题标题】:Is it possible to merge two streams using CopyTo method?是否可以使用 CopyTo 方法合并两个流?
【发布时间】:2016-10-26 18:53:11
【问题描述】:

是否可以使用 CopyTo 方法合并两个(或多个)流(或 MemoryStream)?

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

MemoryStream omDest = new MemoryStream();

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

s1.CopyTo(omDest);

但是如果我复制两个,第二个会覆盖第一个。

感谢您的帮助。

谢谢。

【问题讨论】:

    标签: merge stream memorystream


    【解决方案1】:

    您可以像这样将目标流的位置设置为 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+",");
        }
    }
    

    最好的问候
    弗洛尔

    编辑:
    为了更简单,你也可以使用WriteTo-Method,这样你就不需要重置位置了。

    【讨论】:

    • 谢谢。尝试了一切——CopyTo、WriteTo、指定位置——只打印最后一个流。虽然它正确地组合了所有内容,但我可以看到目标流的大小。导出为 PDF 有一些棘手的问题,我无法弄清楚到底是什么。
    • 也许你应该调整你的问题,因为这可能是你的PDF文件的问题,也许人们能够为你提供有用的帮助^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2015-06-19
    相关资源
    最近更新 更多