该进程无法访问文件“x”,因为正在按应用程序删除已保存的图像时,其他进程正在使用该文件

时间:2013-06-20 12:25:26

标签: vb.net

初学者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”)

它有效。 谢谢詹姆斯以及为我提供宝贵时间的所有人

3 个答案:

答案 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}}