私のコードに何が問題なのですか教えてください。 PDFをマージするために使用しています。メモリストリームを作成してPDFに出力します。それは私のために正常に動作しますが、一部のユーザーはIEでファイルをダウンロード、またはChromeでネットワークエラーを取得することはできません。MemoryStream - PDFをマージするときに閉じたストリームにアクセスできない
public static MemoryStream MergePdfForms(List<byte[]> files)
{
if (files.Count > 1)
{
PdfReader pdfFile;
Document doc;
PdfWriter pCopy;
MemoryStream msOutput = new MemoryStream();
pdfFile = new PdfReader(files[0]);
doc = new Document();
pCopy = new PdfSmartCopy(doc, msOutput);
doc.Open();
for (int k = 0; k < files.Count; k++)
{
pdfFile = new PdfReader(files[k]);
for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)
{
((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
}
pCopy.FreeReader(pdfFile);
}
pdfFile.Close();
pCopy.Close();
doc.Close();
return msOutput;
}
else if (files.Count == 1)
{
return new MemoryStream(files[0]);
}
return null;
}
デバッグした後、私はメモリストリームmsOutputは多少の誤差があることに気付きました
どうしたのですか?それを避ける方法は?
ありがとうございます。
彼らのドキュメントで確認を見つけるのは難しいが、あなたがオブジェクトにストリームをラップする場合、通常は、それはまた、ラップストリームを閉じ、そのオブジェクトを閉じます。 'pCopy = new PdfSmartCopy(doc、msOutput);'は 'pCopy'に' msOutput'をラップし、 'msOutput'を(おそらく)閉じた' pCopy.Close() 'を呼び出すと、その閉じたストリームを返します。 – Quantic
混乱を招くのは、「一部のユーザー」がこの問題を抱えているということです。 'msOutput'処分の問題なら、* all *ユーザは問題を抱えているでしょう。 –
はい、これは私にとっても紛らわしいものでした。私はこのようなファイルをダウンロードした場合:Response.BinaryWrite(ms.ToArray();)、それはうまく動作しますが、いくつかのユーザーに問題があります。 );エラーが発生しました:クローズドストリームにアクセスできない – Peter