初学者n设计一个在硬盘上保存图像的测试应用程序及其在sql表中的名称。 我可以保存,浏览记录但无法删除图像。
它给了我错误 该进程无法访问文件“x”,因为删除图像时其他进程正在使用该文件代码如下:
Private Sub btnDelete_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btnDelete.Click isProcName =“btnDelete_Click” OBJ =新clsImageStoring
Try
Dim result As DialogResult = MessageBox.Show(Me, "Do you really want to delete this Record?", "Query", vbYesNo, vbQuestion)
If result = Windows.Forms.DialogResult.Yes Then
iiId = DGV.Rows(iiRowno).Cells(0).Value
iiImageNo = DGV.Rows(iiRowno).Cells(1).Value
Dim liTempImageNo As Int64 = 0
If OBJ.Delete(iiId) Then
Fillgrid()
liTempImageNo = DGV.Rows(0).Cells(1).Value
picEmp.Image.Dispose()
picEmp.Image = Image.FromFile("D:\EmpImages\" & liTempImageNo & ".jpg")
'File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")
FileIO.FileSystem.DeleteFile("D:\EmpImages\" & iiImageNo & ".jpg")
MessageBox.Show(Me, "Record Deleted Successfully", "Information", vbOKOnly, vbInformation)
End If
End If
Catch ex As Exception
clsLog.WriteException(ex, isModuleName, isProcName)
End Try
End Sub
我尝试处理图像和图片框并在图片框中加载另一个图像 除了Image类的From文件方法之外,我还没有使用任何文件对象来打开文件。
任何帮助将不胜感激 三江源
处置不起作用。它没有处理图像仍然使用的图像,但当我尝试手动删除该特定图像时,我向我显示错误,该文件已被“vshost.exe”使用,这是我的应用程序本身。所以我使用文件流来加载图片框中的图片,正如James所说,但是当我尝试使用以下代码删除任何图片时,它仍然给我错误:
File.Delete(“D:\ EmpImages \”& iiImageNo&“.jpg”)
File.Delete(“D:\ EmpImages \”& iiImageNo&“.jpg”)
所以我试过这个
FileSystem.Kill(“D:\ EmpImages \”& iiImageNo&“。jpeg”)
它有效。 谢谢詹姆斯以及为我提供宝贵时间的所有人
答案 0 :(得分:6)
the documentation for Image.FromFile
中解释了这一点:
文件保持锁定状态,直到图像被丢弃。
答案 1 :(得分:5)
当您尝试从磁盘中删除图片时,图片框可能仍未释放图像,更可靠的方法是从Stream
加载图像。
Using fs As New System.IO.FileStream("file path", IO.FileMode.Open, IO.FileAccess.Read)
PictureBox1.Image = System.Drawing.Image.FromStream(fs)
End Using
这可以防止对文件进行任何类型的锁定。
它似乎是common problem。
答案 2 :(得分:2)
{{1}}