Подтвердить что ты не робот

MemoryStream, невозможно получить доступ к закрытому потоку

В библиотеке sharpPDF я создаю поток в pdf-памяти, и я хочу отправить его напрямую по электронной почте. Но строка ms.Seek(.... дает ObjectDisposedException;

Невозможно получить доступ к закрытому потоку.

Метод pdf.CreatePDF принимает либо строку (output) fileName, либо поток (out). Но я думаю, что это также закрывает поток? Я не привык много работать с потоками, поэтому, если вы могли бы посоветовать, как это сделать?

Исходный код sharpPDF метода CreatePDF можно найти здесь:

http://www.java2s.com/Open-Source/CSharp/PDF/SharpPDF/sharpPDF/pdfDocument.cs.htm

Public Sub SendPDF()
   Dim pdf As New sharpPDF.pdfDocument("Title", "Author")

   '....Generate pdf content

   Dim ms As New IO.MemoryStream
   pdf.CreatePDF(ms)

   Dim email As New EmailService
   email.Send(ms)

End Sub

Public Class EmailService
   Public Sub Send(Byval ms as Stream)
        ms.Seek(0, IO.SeekOrigin.Begin)

        Dim atc As New Attachment(ms, "Report.pdf")
        mail.Attachments.Add(atc)

        '....set other email parameters

        client.SendAsync(mail, mail.Subject)
  End Sub 
End Class
4b9b3361

Ответ 1

Один простой подход состоит в том, чтобы получить массив байтов из закрытого MemoryStream и создать еще один:

pdf.CreatePDF(ms)
ms = new MemoryStream(ms.ToArray())

Dim email As New EmailService
email.Send(ms)

Обратите внимание, что это нормально, чтобы вызвать MemoryStream.ToArray в закрытом/расположенном экземпляре MemoryStream. Он даже документировал:

Примечание
Этот метод работает, когда MemoryStream закрыт.