WPF アプリケーションで画像の読み取り/コピー操作を行っています。次のコードを見てください。
try
{
if (sourceDir != "")
File.Copy(sourceDir, Path.Combine(backupDir, ecode + ".jpg"), true);
}
catch (Exception exx)
{
MessageBox.Show(exx.ToString());
}
シナリオで問題を説明しましょう:
このコードが最初に実行されたときのsourceDir
値Path.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"
初めて正常に動作し、ファイルが宛先フォルダーにコピーされています。
ただし、このコードが次の値で実行される 2 回目:
sourceDir ="C:\Users\Public\Pictures\Sample Pictures\Penguins.jpg"
Path.Combine(backupDir, ecode + ".jpg") ="D:\ IEPL-archives-Do not Modify\DATA\654.jpg"
次の例外がスローされます。
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;
}
この競合が発生しないようにコードを変更する方法を提案してください。ありがとう