【发布时间】:2013-09-14 18:22:51
【问题描述】:
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 当然是图像的路径。
完全不知道从哪里开始......
【问题讨论】:
-
您是否在代码 itemsBO.ImageLoc 的某个位置读取文件?
-
ImageLoc 是文件的路径,是的。
-
我的意思是你是在这个位置加载文件 itemsBO.ImageLoc 到你的应用程序中吗?如果是,你是如何加载它的
-
文件的创建者和代码运行的Account一样吗?换句话说,它可能没有删除文件的权限。建议更改文件的权限并重新运行您的代码。
-
很多时候,未必还没有创建文件--他们使用Win7中的截图工具截屏,然后右键-->复制,甚至不保存和粘贴它进入应用程序。
标签: c# .net ioexception