簡體   English   中英

將Memorystream追加到現有Memorystream

[英]Appending Memorystream to existing Memorystream

我在將MemoryStream中的數據附加到其他Memorystream時遇到麻煩, 已經創建了完整的數據 我這樣做是為了從兩個不同的來源創建一個excel。

首先,我創建父親的內存流:

MemoryStream obj_stream = new MemoryStream(100000000);
var tempFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid() + ".xls");
obj_stream.Write(File.ReadAllBytes(tempFile), 0, File.ReadAllBytes(tempFile).Length);
File.Delete(tempFile);

然后我從CompositeLink.ExportToXls創建子內存流

compositeLink.CreatePageForEachLink();
compositeLink.PrintingSystemBase.XlSheetCreated += PrintingSystemBase_XlSheetCreated;

using (MemoryStream stream = new MemoryStream(100000000))
{
    compositeLink.ExportToXls(stream, new XlsExportOptions() { ExportMode = XlsExportMode.SingleFilePageByPage });
    obj_stream.Write(stream.ToArray(), 0, stream.ToArray().Length);
}

最后我將流寫入Page.Response

if (Page == null || Page.Response == null)
    return;
string disposition = saveAsFile ? "attachment" : "inline";
Page.Response.Clear();
Page.Response.Buffer = false;
Page.Response.AppendHeader("Content-Type", string.Format("application/{0}", fileFormat));
Page.Response.AppendHeader("Content-Transfer-Encoding", "binary");
Page.Response.AppendHeader("Content-Disposition", string.Format("{0}; filename={1}.{2}", disposition, fileName, fileFormat));
Page.Response.BinaryWrite(obj_stream.ToArray());
Page.Response.End();

我相信正在發生的事情是,一個或另一個被另一個覆蓋,這取決於我執行的是哪個“ nameOfTheStream” .write()

第二次您寫入obj_stream ,不要再次從0索引(在Write方法的第二個參數中指定)開始寫入。 已經有一些數據了。

obj_stream.Write(stream.ToArray(), obj_stream.ToArray().Length, stream.ToArray().Length);

方法詳細信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM