C#/ .NET 3.5,WindowsForms。
我有这个Windows窗体显示文件中的图像,每当用户保存记录时,执行此代码:
string oldLoc = itemsBO.ImageLoc;
if (oldLoc != SystemSettings.NoImageLocation)
{
if (File.Exists(oldLoc))
{
try { File.Delete(oldLoc); }
catch (IOException ex)
{
MessageBox.Show("1 - " + ex.GetType().ToString() + " " + ex.Message);
}
}
}
string saveLoc = itemsBO.ImageSearchLoc + ".jpg";
if (File.Exists(saveLoc))
{
try { File.Delete(saveLoc); }
catch (IOException ex)
{
MessageBox.Show("2 - " + ex.GetType().ToString() + " " + ex.Message);
}
}
try
{
if (pictureBox2.Image != null)
pictureBox2.Image.Save(saveLoc, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (IOException ex)
{
MessageBox.Show("3 - " + ex.GetType().ToString() + " " + ex.Message);
}
忽略可怜的MessageBox消息,但它在每个Catch语句中都出错。它无法删除“现有”图像,因为它表示它正在被另一个进程使用。无法保存,因为文件存在于同一路径中,因为它没有删除。
这是在尝试添加新图片时设置图像的代码;
Image clipImage = Clipboard.GetImage();
if (tabControl2.SelectedTab == tabPage5)
{
pictureBox1.Image = clipImage;
itemsBO.IsDirtyImage = true;
}
else if (tabControl2.SelectedTab == tabPage6)
{
pictureBox2.Image = clipImage;
itemsBO.IsDirtyImage2 = true;
}
然后当表单加载带有图像的现有记录时,这是用于获取/显示它的代码:
byte[] bits = File.ReadAllBytes(imgfil);
msImage = new MemoryStream(bits, 0, bits.Length);
if (tabControl2.SelectedTab == tabPage5)
pictureBox1.Image = Image.FromStream(msImage);
else if (tabControl2.SelectedTab == tabPage6)
pictureBox2.Image = Image.FromStream(msImage);
当然,imgfil是图像的路径。
绝对不知道从哪里开始...
答案 0 :(得分:0)
我有这个Windows窗体,它显示文件中的图像,以及用户保存记录的时间
如果您在保存文件时仍然显示图像,如果我没有弄错,应用程序仍将访问该文件。首先尝试处理文件,可能是将图片框(或用于显示图像的任何图像)图像设置为空,或者在执行操作之前加载空白图片。
答案 1 :(得分:0)
如果它说另一个进程正在使用该文件,那么它必须被另一个进程使用:)
您是否尝试使用Process Explorer监控文件锁定。 一旦确定了文件的内容,请使用Process Explorer关闭该文件句柄,然后尝试运行代码。
这可能会有所帮助 - How to find out what processes have folder or file locked?
答案 2 :(得分:0)
所以我从另一个用户继承了这个应用程序,结果是pictureBoxes将他们的Image设置在另一个代码块中,与原始帖子中的第三个代码块无关。正因为如此,发生了IOException :(