2013-09-23 40 views
2

我正在使用下面的代碼生成pdf。然後它填充一個gridview,以便用戶可以點擊剛剛生成的PDF。因爲它正被另一個進程使用Exception type: IOException異常消息:進程無法訪問文件,因爲它正在被另一個進程使用

該進程無法訪問該文件「\服務器\ PDF文件\ PE10091026-Rev.pdf」 :我正在一個異常信息。

如果我生成另一個PDF,則可以打開上一個PDF。

任何想法如果沒有人打開文件,鎖上的是什麼?

Dim Doc1 As New Document 
Dim path As String = "\\server\PDFs\" 
Dim myUniqueFileName = String.Format("{0}.pdf", Session("FileName") & "-Rev") 
Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, New FileStream(path & myUniqueFileName, FileMode.Create)) 

Doc1.Open() 
Dim test As String 
test = Session("PDF") 
Dim PDFHeader As String 
PDFHeader = Session("Header") 
Dim imagepath As String = Server.MapPath(".") & "/images/Header.png" 
Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath) 
image.ScalePercent(70.0F) 
Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.BLACK, Element.ALIGN_LEFT, 1) 

Doc1.Add(image) 
Doc1.Add(New Paragraph(PDFHeader)) 
Doc1.Add(New Chunk(line1)) 
Doc1.Add(New Paragraph(test)) 
Doc1.Close() 
Doc1.Dispose() 
+0

我看不到你在哪裏使用pdfWrite對象。它是否需要關閉和/或處置?另外,在PdfWrite的構造函數中,創建一個新的FileStream。這會創建並打開文件。該文件流如何關閉? –

+0

我曾嘗試使用filestream.dispose,但它不作爲選項提供 – user1342164

+1

您需要將FileStream存儲在變量中,以便您可以將其稱爲Close或Dispose方法。 –

回答

2

您可能需要使用FileStreamFileStream.Dispose()使用Using語句來處理。目前FileStream仍在中創建模式,當您嘗試第二次打開它時。

Using fs As New FileStream(Path & myUniqueFileName, FileMode.Create) 

    Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(Doc1, fs) 
    Doc1.Open() 

    Dim test As String 
    test = Session("PDF") 
    Dim PDFHeader As String 
    PDFHeader = Session("Header") 
    Dim imagepath As String = Server.MapPath(".") & "/images/Header.png" 
    Dim image As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(imagepath) 
    image.ScalePercent(70.0F) 
    Dim line1 As New iTextSharp.text.pdf.draw.LineSeparator(0.0F, 100.0F, BaseColor.BLACK, Element.ALIGN_LEFT, 1) 

    Doc1.Add(image) 
    Doc1.Add(New Paragraph(PDFHeader)) 
    Doc1.Add(New Chunk(line1)) 
    Doc1.Add(New Paragraph(test)) 
    Doc1.Close() 
    Doc1.Dispose() 

End Using 
+0

我已經使用Doc1.Dispose,如上所示。我曾嘗試使用filestream.dispose,但它不作爲選項提供。 – user1342164

+1

您放置了Doc1,但未放入pdfWrite。 –

+1

感謝您的幫助 – user1342164

相關問題