我正在尝试为每个文件读取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();
}
错误:
偏移和长度超出数组范围或计数更大 比从索引到源头的元素数量 集合
答案 0 :(得分:7)
startPosition
不会偏移到MemoryStream,而是偏移到ba
。将其更改为
allFrameStream.Write(ba, 0, ba.Length);
所有字节数组都将附加到allFrameStream
BTW:不要使用ba = allFrameStream.GetBuffer();
而是使用ba = allFrameStream.ToArray();
(实际上你不想要MemoryStream的内部缓冲区)。
答案 1 :(得分:0)
Stream.Write
上的MSDN文档可能有助于澄清问题。
Streams被建模为连续的序列字节。读取或写入流会使您在流中的位置按读取或写入的字节数移动。
Write
的第二个参数是 source 数组中从中开始复制字节的索引。在你的情况下,这是0,因为你想从数组的开头读取。