2

ma初学者n设计了一个将图像保存在硬盘上并将其名称保存在sql表中的测试应用程序。我能够保存、浏览记录但无法删除图像。

它给了我错误该进程无法访问文件'x',因为在删除图像时它正在被另一个进程使用

代码如下:

Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnDelete.Click isProcName = "btnDelete_Click" OBJ = New 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 file 方法之外,我不使用任何文件对象打开文件。

任何帮助将不胜感激谢谢


处置没有用。它没有处理图像,该图像仍在使用中,但是当我尝试手动删除该特定图像时,我向我显示该文件已被“ vshost.exe ”使用的错误,这是我的应用程序本身。因此,正如詹姆斯所说,我使用文件流在图像框中加载图片,但是当我尝试使用以下代码删除任何图像时,它仍然给了我错误:

File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")
File.Delete("D:\EmpImages\" & iiImageNo & ".jpg")

所以我尝试了这个

FileSystem.Kill("D:\EmpImages\" & iiImageNo & ".jpeg")

它奏效了。谢谢詹姆斯和所有为我付出宝贵时间的人

4

3 回答 3

6

这在以下文档中进行了Image.FromFile解释:

该文件保持锁定状态,直到图像被释放。

于 2013-06-20T12:40:47.187 回答
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

这将防止对文件进行任何形式的锁定。

这似乎是一个普遍的问题

于 2013-06-20T12:43:46.733 回答
2
Dim xx as Image
Using str As Stream = File.OpenRead(Fileloc)
xx = Image.FromStream(str)
End Using
picturebox.Image = xx
于 2015-05-12T12:30:01.237 回答