从vb.net中删除路径中获取错误的图像时

时间:2014-03-18 11:20:19

标签: c# vb.net winforms picturebox

我正在处理windowes表单application..in show button event我写了这样的代码:

Me.PictureBox1.Load("C:/Signature.tif")
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
Me.PictureBox1.BorderStyle = BorderStyle.Fixed3D

然后保存按钮单击我写这样的代码:

Dim exittime As String = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")
Dim ms As New MemoryStream
Dim byt() As Byte
PictureBox1.Image.Save(ms, PictureBox1.Image.RawFormat)
byt = ms.GetBuffer
Dim sqlstr As String = "Update Visitorlogo_tbl set signimage=@pic,exittime='" & exittime & "',status=2 where PassNo='" & txtvisitorid.Text & "'"
Dim cmd1 As New SqlCommand(sqlstr, con.connect)
cmd1.Parameters.Add("@pic", SqlDbType.Image)
cmd1.Parameters("@pic").Value = byt
cmd1.ExecuteNonQuery()
con.disconnect()
PictureBox1.Image = Nothing
If System.IO.File.Exists("C:/Signature.tif") Then
   System.IO.File.Delete("C:/Signature.tif")
End If

虽然保存图像图像得到了保存,但之后我想删除该路径中的图片..来到这一行时:System.IO.File.Delete("C:/Signature.tif")收到错误: 进程无法访问文件'C:\ Signature.tif',因为它正由另一个进程使用

3 个答案:

答案 0 :(得分:4)

问题可能在这里。

Me.PictureBox1.Load("C:/Signature.tif")

试试这个

Me.PictureBox1.Image = new Bitmap("C:\Signature.tif");

<强>更新:

PictureBox1.Load()方法将从给定位置加载文件,并将文件路径存储在PictureBox.ImageLocation属性中。使用此方法,应用程序将打开该图像并锁定,因此,其他用户无法修改或读取它。

PictureBox1.Image = new Bitmap("filePath");将从给定的文件路径创建另一个图像对象,它不会锁定原始文件路径。此方法不会从给定的文件位置加载原始图像。因此,此处不会设置PictureBox1.ImageLocation属性。如何访问该图像并进行修改。

答案 1 :(得分:1)

PictureBox将保持文件打开。因此,您可以使用@Shell建议的修复程序在读取内容后释放该文件。此行为是PictureBox的设计。

http://support.microsoft.com/kb/309482

以下是根据知识库文章

改编的解决方法
Using fs as New System.IO.FileStream("C:\Signature.tif", IO.FileMode.Open, IO.FileAccess.Read)
    PictureBox1.Image = System.Drawing.Image.FromStream(fs)
End Using

答案 2 :(得分:0)

由于错误消息表明图像是由另一个进程打开的。你有没有在图形程序中打开图像?

您是否在后台运行了另一个已锁定图像以供阅读的应用程序实例?

如果关闭其他程序。