我正在尝试读取每个文件的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();
}
错误:
偏移量和长度超出数组的界限,或者计数大于从索引到源集合末尾的元素数
3条答案
按热度按时间gdrx4gfi1#
startPosition
未偏移到MemoryStream,而是偏移到ba
。将其更改为所有字节数组都将追加到
allFrameStream
ba = allFrameStream.GetBuffer();
,而是使用ba = allFrameStream.ToArray();
*(实际上您不需要MemoryStream的内部缓冲区)。cgh8pdjw2#
Stream.Write
上的MSDN文档可能有助于澄清此问题。流被建模为一个连续的字节序列。阅读或写入流会根据读取或写入的字节数移动您在流中的位置。
Write
的第二个参数是 source 数组中开始复制字节的索引,在本例中为0,因为您希望从数组的开头读取。68de4m5k3#
也许这是一个简单的解决方案,不是最好的,但很容易