使用 visual basic 在使用所述文件后尝试删除文件
Trying to delete a file after using said file, using visual basic
我正在开发一个程序,可以根据程序的屏幕截图创建 PDF 文件 window。这是我程序的 layout/UI:
基本上对于我的程序,我正在截取您在上面看到的 UI 的屏幕截图,将其保存为 Jpg 文件,然后将该 Jpg 文件转换为 PDF。
程序成功将 Jpg 转换为 PDF 后,我希望程序删除 Jpg,留下 PDF 文件。 问题 由 2) Create PDF
按钮点击事件引起的 IOexception
错误引起:
The process cannot access the file 'C:\Users\Aliza\OneDrive\Desktop\test14\notebook_3412312.jpg' because it is being used by another process.'
我应该注意到程序成功地制作了我想要的 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, 0, 0, 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()
错误发生在您从上面看到的代码的第二行到最后一行(以 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)
我知道你说过不要在 Using
语句中加入 Dispose()
调用,但我很难确定在 Using
之间放置什么陈述。再次感谢您对我的耐心帮助。
看起来这两行应该反过来:
My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
img.Dispose()
如果 img
是从您尝试使用 Image.FromFile
或 New Bitmap
删除的文件创建的 Image
对象,则文件将被锁定,直到 Image
对象被释放。理想情况下,您可以使用 Using
语句创建 Image
,然后删除块外的文件,例如
Dim filePath = "file path here"
Using img = Image.FromFile(filePath)
'Use img here.
End Using
File.Delete(filePath)
所以这个问题的解决方案很简单。在与朋友讨论之后,我们所要做的就是在声明 filePath
变量时创建一个 TempPath
:
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, 0, 0, oPage.Width, oPage.Height)
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")
doc.Close()
xImg.Dispose()
我正在开发一个程序,可以根据程序的屏幕截图创建 PDF 文件 window。这是我程序的 layout/UI:
基本上对于我的程序,我正在截取您在上面看到的 UI 的屏幕截图,将其保存为 Jpg 文件,然后将该 Jpg 文件转换为 PDF。
程序成功将 Jpg 转换为 PDF 后,我希望程序删除 Jpg,留下 PDF 文件。 问题 由 2) Create PDF
按钮点击事件引起的 IOexception
错误引起:
The process cannot access the file 'C:\Users\Aliza\OneDrive\Desktop\test14\notebook_3412312.jpg' because it is being used by another process.'
我应该注意到程序成功地制作了我想要的 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, 0, 0, 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()
错误发生在您从上面看到的代码的第二行到最后一行(以 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)
我知道你说过不要在 Using
语句中加入 Dispose()
调用,但我很难确定在 Using
之间放置什么陈述。再次感谢您对我的耐心帮助。
看起来这两行应该反过来:
My.Computer.FileSystem.DeleteFile(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".jpg")
img.Dispose()
如果 img
是从您尝试使用 Image.FromFile
或 New Bitmap
删除的文件创建的 Image
对象,则文件将被锁定,直到 Image
对象被释放。理想情况下,您可以使用 Using
语句创建 Image
,然后删除块外的文件,例如
Dim filePath = "file path here"
Using img = Image.FromFile(filePath)
'Use img here.
End Using
File.Delete(filePath)
所以这个问题的解决方案很简单。在与朋友讨论之后,我们所要做的就是在声明 filePath
变量时创建一个 TempPath
:
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, 0, 0, oPage.Width, oPage.Height)
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
doc.Save(fileLocation & "\" & RemoveWhitespace(filename) & "_" & RemoveWhitespace(collectionPeriod) & ".pdf")
doc.Close()
xImg.Dispose()