Я пытаюсь найти способ закрыть процесс, в котором хранится файл pdf, который я создаю. Я попытался уничтожить и закрыть поток после его создания, но я получаю сообщение, что процесс не может получить доступ к файлу '\ server \ PDFs \ test.pdf', потому что он используется другим процессом. В принципе, как только test.pdf создается первоначально, у меня есть страница, где они могут редактировать данные, и она воссоздает пересмотренный test.pdf. Любая идея, как я могу закрыть процесс? Я пытался сделать цикл while, чтобы продолжать попытки, но не повезло?Невозможно закрыть файл, используемый другим процессом
'Create the original pdf
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))
pdfWrite.Flush()
Doc1.Close()
Doc1.Dispose()
pdfWrite.Dispose()
pdfWrite.Close()
Воссоздайте PDF после редактирования данных:
Dim _fileInUse As Boolean = True
Do While _fileInUse
_fileInUse = FileInUse(myUniqueFileName)
If Not _fileInUse Then
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))
End If
Loop
Doc1.Close()
Doc1.Dispose()
Public Function FileInUse(ByVal sFile As String) As Boolean
Dim thisFileInUse As Boolean = False
Dim fs As FileStream
If File.Exists(sFile) Then
Try
fs = File.Open(sFile, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)
fs.Close()
fs.Dispose()
Catch
Try
fs.Close()
fs.Dispose()
Catch
End Try
thisFileInUse = True
End Try
End If
Return thisFileInUse
End Function
Вы не можете перезаписать файл, но у вас есть возможность переименовать старый файл, а затем написать новый. –
Как мне переименовать старый файл? – user1342164