如何解决在使用该文件后尝试删除该文件,使用 Visual Basic
我正在开发一个程序,该程序可以从程序窗口的屏幕截图中创建一个 PDF 文件。这是我的程序的布局/用户界面:
基本上对于我的程序,我正在截取您在上面看到的 UI 的屏幕截图,将其另存为 Jpg 文件,然后将该 Jpg 文件转换为 PDF。
一旦程序成功将 Jpg 转换为 PDF,我希望程序删除 Jpg,留下 PDF 文件。 问题是由 IOexception
按钮点击事件引起的 2) Create PDF
错误引起的:
进程无法访问文件“C:\Users\Aliza\OneDrive\Desktop\test14\notebook_3412312.jpg”,因为它正被另一个进程使用。'
我应该注意到该程序成功地制作了我想要的 PDF,但我只希望程序在从该 Jpg 文件中创建一个 PDF 后删除该 Jpeg 文件。
这是我在 2) Create PDF
事件中的代码:
Dim filename As String
Dim collectionPeriod As String
Dim fileLocation As String
filename = CompNam.Text
If filename = "" Then
MessageBox.Show("Enter name of your file")
End
End If
collectionPeriod = collectPeriod.Text
If collectionPeriod = "" Then
MessageBox.Show("Enter name of your collection period")
End
End If
fileLocation = folderBrowseBox.Text
GetFormImage(True).Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg",ImageFormat.Jpeg)
' Create new pdf document and page
Dim doc As New PdfDocument()
Dim oPage As New PdfPage()
' Add the page to the pdf document and add the captured image to it
doc.Pages.Add(oPage)
Dim img As XImage = XImage.FromFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
'Create XImage object from file.
Using xImg = PdfSharp.Drawing.XImage.FromFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
'Resize page Width and Height to fit image size.
oPage.Width = xImg.PixelWidth * 72 / xImg.HorizontalResolution
oPage.Height = xImg.PixelHeight * 72 / xImg.HorizontalResolution
'Draw current image file to page.
Dim xgr = PdfSharp.Drawing.XGraphics.FromPdfPage(oPage)
xgr.DrawImage(xImg,oPage.Width,oPage.Height)
End Using
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")
My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
img.Dispose()
错误发生在您从上面看到的第 2 行到最后一行代码(以 My.Computer.FileSystem...
开头)。再次,任何帮助将不胜感激!
编辑:@ jmcilhinney 这是我根据您的建议尝试添加的代码:
Dim filePath As String
filePath = fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"
Using img As XImage = XImage.FromFile(filePath)
img.Dispose()
End Using
My.Computer.FileSystem.DeleteFile(filePath)
我知道您说过不要在 Dispose()
语句中放入 Using
调用,但是我很难在 Using
语句之间放入什么。再次感谢您在帮助我时对我非常耐心。
解决方法
看起来这两行应该是相反的:
My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
img.Dispose()
如果 img
是从您尝试使用 Image
或 Image.FromFile
删除的文件创建的 New Bitmap
对象,则该文件将被锁定,直到 {{1 }} 对象被释放。理想情况下,您可以使用 Image
语句创建 Image
,然后删除块外的文件,例如
Using
,
所以这个问题的解决方法很简单。在与朋友讨论之后,我们所要做的就是在声明 TempPath
变量时创建一个 filePath
:
Dim filePath As String
filePath = System.IO.Path.GetTempPath & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"
之前的问题是,我们使用 fileLocation
变量中的文本保存 Jpeg 文件时,不断出现“进程正在被另一个进程使用”错误。
使用 Using
块被证明是不必要的。恰恰相反,它实际上带来的弊大于利。这是新的、改进的代码:
fileLocation = folderBrowseBox.Text
Dim filePath As String
filePath = System.IO.Path.GetTempPath & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg"
GetFormImage(True).Save(filePath,ImageFormat.Jpeg)
' Create new pdf document and page
Dim doc As New PdfDocument()
Dim oPage As New PdfPage()
' Add the page to the pdf document and add the captured image to it
doc.Pages.Add(oPage)
'Create XImage object from file.
Dim xgr = XGraphics.FromPdfPage(oPage)
Dim xImg = XImage.FromFile(filePath)
oPage.Width = xImg.PixelWidth * 72 / xImg.HorizontalResolution
oPage.Height = xImg.PixelHeight * 72 / xImg.HorizontalResolution
xgr.DrawImage(xImg,oPage.Width,oPage.Height)
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")
doc.Close()
xImg.Dispose()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。