如何在C#中附加流的内容?

时间:2014-01-17 18:45:09

标签: c#

我正在将一个流复制到另一个流以在最后获得一个完整的流,然后以.wav形式保存流,但是我得到了流的第一部分的内容。

我正在开发具有记录,暂停,停止功能的刻录机。当我按下录制按钮时,我得到一个流并在停止按钮中将此流复制到另一个流,然后我重复这些步骤,当我在一个地方/流合并所有流时,我只获得第一个复制流的内容。

public void CopyInputStreamToOutput(Stream fromStream, MemoryStream destination)
{
    int num;
    byte[] buffer = new byte[fromStream.Length];
    fromStream.Position = 0;
    while ((num = fromStream.Read(buffer, 0, buffer.Length)) != 0)
    {
        destination.Write(buffer, 0, num);
    }
}

我需要这个: stream1 + stream2 + stream3 + ... + streamN = finalStream 。如何将一个流附加到另一个流以获得最终流?

这个位置有问题吗?

1 个答案:

答案 0 :(得分:0)

我猜这个 - 不是该领域的专家。请将其视为伪代码

public void CopyInputStreamToOutput(Stream fromStream, MemoryStream destination)
{
    MemoryStream ms = new MemoryStream();
    ms.Write(destination.GetBuffer(), 0, (int)destination.Length); 
    ms.Write(fromStream.GetBuffer(), 0, (int)fromStream.Length); 
    destination = ms;
}

<击>

这是有效的:

public static void CopyInputStreamToOutput(Stream fromStream, ref MemoryStream destination)
{
    MemoryStream ms = new MemoryStream();
    destination.Position = 0;
    destination.CopyTo(ms);
    fromStream.Position = 0;
    fromStream.CopyTo(ms);
    destination = ms;
}

这更好,因为它不会创建额外的副本,但可能需要考虑destination位置。 CopyTo个州does not reset the position of the destination stream after the copy operation is complete.的记录:

public static void CopyInputStreamToOutput(Stream fromStream, ref MemoryStream destination)
{
    //MemoryStream ms = new MemoryStream();
    //destination.Position = 0;
    //destination.CopyTo(ms);
    fromStream.Position = 0;
    fromStream.CopyTo(destination);
    //destination = ms;
}