在我当前的项目中,我遇到了随机错误,抱怨有问题的文件正在被其他进程使用。
有时它动作很快,一切都很好,有时它不起作用并不断给我错误
该文件正被另一个进程使用
所以我想我把delete方法放在a里面try-catch
,在catch中我有某种循环,它会尝试删除文件,甚至更好:解锁它并让它准备好被删除。
我不知道在那个循环中我是否得到另一个异常,以及如何管理它。如何找到解决方案将该进程与文件分离,并使其准备好删除?
更新
这是我目前的代码:
private void Test(string imagePath)
{
try
{
if (File.Exists(imagePath))
{
pictureBoxExistingPicture.Visible = true;
labelnew.Visible = true;
labelold.Visible = true;
pictureBoxExistingPicture.Image = ImageUtility.SafeLoadImage(imagePath);
if (MessageBox.Show("Do you want to overwrite the existing image?", "warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
{
pictureBoxExistingPicture.Image = Properties.Resources._default;//restore default
while (true)
{
try
{
File.Delete(imagePath);
break;
}
catch (Exception)
{
}
}
pictureBoxHonarjo.Image.Save(imagePath);
}
else
{
pictureBoxHonarjo.Image = ImageUtility.SafeLoadImage(imagePath);//restore original image
}
pictureBoxExistingPicture.Visible = false;
labelnew.Visible = false;
labelold.Visible = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在当前主题的上下文中,我需要说,如果用户希望替换图像,它应该完成,它不应该花费很长时间,也不应该失败。所以基本上当有人试图改变一张图片,它必须在很短的时间内改变。
对于该SafeLoadImage
功能,这是我的实现:
public class ImageUtility
{
public static byte[] ImageToBytes(string FilePath, int FileLength)
{
FileStream fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
BinaryReader breader = new BinaryReader(fileStream);
return breader.ReadBytes(FileLength);
}
public static Image SafeLoadImage(string imagePath)
{
byte[] image_byte;
Image image;
FileInfo fileinfo = new FileInfo(imagePath);
image_byte = ImageUtility.ImageToBytes(imagePath, (int)fileinfo.Length);
image = ImageUtility.BytesToImage(image_byte);
return image;
}
}