C# - 无法访问已关闭的流

C# - Cannot access a closed stream

我使用 iTextSharp 5.5.13.2 版创建 PDF 的代码返回错误“无法访问已关闭的流”。 我不确定这个错误是如何出现的,因为我将我的代码封装在 Using 语句的范围内。调试会导致应用程序中断状态。 PdfWriter writer = PdfWriter.GetInstance(doc, ms);

查看(已弃用)iTextSharp 5.5.13.2 的源代码here, I can find the source for the DocWriter (base class of PdfWriter) and it's Close method here

public virtual void Close() {
    open = false;
    os.Flush();
    if (closeStream)
        os.Close();
}

os 在这种情况下是作为第二个参数传递给 PdfWriter.GetInstance (在你的情况下是 ms )。使用 Ctrl + F 我可以找到 closeStream 的来源,它恰好是 属性 公开为 CloseStream here

public virtual bool CloseStream {
    get {
        return closeStream;
    }
    set {
        closeStream = value;
    }
}

一起 CloseDocWriter

Dispose method 自动调用
public virtual void Dispose() {
    Close();
}

因此,如果您不希望 PdfWriter 关闭您的 ms,您需要在 PdfWriter 关闭之前设置 writer.CloseStream = false;