2012-11-07 128 views
0

我在這個循環內從根本上做錯了什麼。第一次通過循環時,Stream可以正常工作,但通過循環的後續時間將會導致Stream被破壞。我知道我可能在做一些愚蠢的事情。我試圖將updateTemplate設置爲0,但InputStream不支持seek。我基本上追加了多個表單,這些表單被填充到列表中。任何建議,將不勝感激,特別是那些會導致更好的表現。複製/克隆流在一個循環...

... 
files.Add(PDFhelper.fillTemplate(template, mappings)); 

foreach (Update u in myObject.Updates) 
{ 
    mappings = this.GenerateFieldMappings(u); 
    Stream output = new MemoryStream(); 
    template.CopyTo(output); 
    files.Add(PDFhelper.fillTemplate(output, mappings)); //First time stream is good 

} 

return PDFhelper.MergeFiles(files); 

... 

回答

0

那麼,這裏是我找到的一個解決方案。雖然,我不覺得它非常有效。它確實完成了工作。

files.Add(PDFhelper.fillTemplate(mainTemplate, mappings)); 
byte[] templateData = updateTemplate.ReadToEnd(); 

foreach (Update u in myobject.Updates) 
{ 
    mappings = this.GenerateFieldMappings(u); 
    MemoryStream output = new MemoryStream(); 
    output.Write(templateData, 0, templateData.Length); 
    output.Position = 0; 
    files.Add(PDFhelper.fillTemplate(output, mappings)); 

} 

return PDFhelper.MergeFiles(files); 
0

如果您添加using關鍵字或添加output.Dispose()在循環結束?請參閱this link

files.Add(PDFhelper.fillTemplate(template, mappings)); 

foreach (Update u in myObject.Updates) 
{ 
    mappings = this.GenerateFieldMappings(u); 
    using(Stream output = new MemoryStream()) 
    { 
     template.CopyTo(output); 
     files.Add(PDFhelper.fillTemplate(output, mappings)); //First time stream is good 
    } 
} 

return PDFhelper.MergeFiles(files);