将byte []附加到MemoryStream

Bil*_*lla 2 .net c# asp.net c#-4.0

我正在尝试读取byte[]每个文件并将其添加到MemoryStream.下面是抛出错误的代码.我追加的是什么?

byte[] ba = null;
List<string> fileNames = new List<string>();
int startPosition = 0;
using (MemoryStream allFrameStream = new MemoryStream())
{
    foreach (string jpegFileName in fileNames)
    {
        ba = GetFileAsPDF(jpegFileName);

        allFrameStream.Write(ba, startPosition, ba.Length); //Error here
        startPosition = ba.Length - 1;
    }

    allFrameStream.Position = 0;

    ba = allFrameStream.GetBuffer();

    Response.ClearContent();
    Response.AppendHeader("content-length", ba.Length.ToString());
    Response.ContentType = "application/pdf";
    Response.BinaryWrite(ba);
    Response.End();
    Response.Close();              
}
Run Code Online (Sandbox Code Playgroud)

错误:

偏移量和长度超出数组的范围,或者计数大于从索引到源集合末尾的元素数量

L.B*_*L.B 8

startPosition不是偏移到MemoryStream,而是ba.将其更改为

allFrameStream.Write(ba, 0, ba.Length); 
Run Code Online (Sandbox Code Playgroud)

将附加所有字节数组 allFrameStream

顺便说一句:不要使用ba = allFrameStream.GetBuffer();代替使用ba = allFrameStream.ToArray();(你实际上不需要MemoryStream的内部缓冲区).