【发布时间】:2019-04-17 13:35:17
【问题描述】:
我正在尝试比较两张图片,如果它们是同一张图片,则删除第二张。当我的程序去删除一个文件时,它会抛出一个错误:The process cannot access the file "C:\Temp\Image.jpg" because it is being used by another process
这种方法不关闭位图文件似乎是一个问题,但我还没有找到一种方法从系统内存中释放位图以将其删除
public static bool ImageCompareString(Bitmap firstImage, Bitmap secondImage)
{
MemoryStream ms = new MemoryStream();
firstImage.Save(ms, ImageFormat.Png);
string firstBitmap = Convert.ToBase64String(ms.ToArray());
ms.Position = 0;
secondImage.Save(ms, ImageFormat.Png);
string secondBitmap = Convert.ToBase64String(ms.ToArray());
if (firstBitmap.Equals(secondBitmap))
{
ms.Close();
return true;
}
else
{
ms.Close();
return false;
}
}
【问题讨论】:
-
你也应该熟悉
IDisposable,看看What are the uses of “using” in C#的介绍。 -
您应该更改的代码超出了此范围。向我们展示这是如何调用的(使用加载位图的代码)
-
J.范朗根是正确的;显示的代码不是发生问题的代码。那将是打开和删除图像的代码。作为旁注,您为什么要将它们作为字符串进行比较?只需使用字节数组本身并使用
.SequenceEquals()。对这样的东西使用字符串操作通常是一种肮脏的程序员捷径,在处理级别上非常昂贵。