gpt4 book ai didi

c# - 无法访问文件,因为它被另一个进程异常使用

转载 作者:行者123 更新时间:2023-12-02 05:39:22 25 4
gpt4 key购买 nike

我正在 WPF 应用程序中执行图像读取/复制操作。请看下面的一段代码:

try
{
if (sourceDir != "")
File.Copy(sourceDir, Path.Combine(backupDir, ecode + ".jpg"), true);
}
catch (Exception exx)
{
MessageBox.Show(exx.ToString());
}

现在让我们用一个场景来解释问题:
第一次当这段代码执行sourceDirPath.Combine(backupDir, ecode + ".jpg") 值为:
sourceDir="C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"
Path.Combine(backupDir, ecode + ".jpg")="D:\IEPL-archives-Do not Modify\DATA\654.jpg"
它第一次工作正常,文件正在被复制到它的目标文件夹。

但是当此代码第二次执行时具有以下值:
sourceDir="C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
Path.Combine(backupDir, ecode + ".jpg")="D:\IEPL-archives-Do not Modify\DATA\654.jpg"
它抛出以下异常:

enter image description here

我也在 UI 中显示相同的图像,这导致了此异常。这是在 UI 中显示图像的代码:

image1.Source = new BitmapImage(new Uri(GetPicture(txtBarcode.Text), UriKind.RelativeOrAbsolute));
private string GetPicture(string _eid)
{
string picname = "";
if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".jpg"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".jpg";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".jpeg"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".jpeg";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".png"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".png";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".gif"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".gif";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".JPG"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".JPG";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".JPEG"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".JPEG";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".PNG"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".PNG";
else if (File.Exists(@"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".GIF"))
picname = @"D:\IEPL-archives-Do not Modify\DATA\" + _eid + ".GIF";
else
picname = @"Images\defaultPicture.jpg";
return picname;
}

请建议我如何修改代码才能避免这种冲突?谢谢

最佳答案

您应该使用 BitmapCacheOption.OnLoad 将图像加载到内存中。这将释放对文件的锁定。

BitmapImage bi = new BitmapImage();
bi.BeginInit();

bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri(GetPicture(txtBarcode.Text), UriKind.RelativeOrAbsolute);

// End initialization.
bi.EndInit();
image1.Source = bi;

关于c# - 无法访问文件,因为它被另一个进程异常使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11227668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com