我正在处理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',因为它正由另一个进程使用
答案 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)
由于错误消息表明图像是由另一个进程打开的。你有没有在图形程序中打开图像?
您是否在后台运行了另一个已锁定图像以供阅读的应用程序实例?
如果关闭其他程序。