我已经尝试了许多不同的方法来执行此操作,并且在我尝试将其删除之前,它仍在告诉我该文件正在使用。
if (Clipboard.GetDataObject().GetData(DataFormats.Bitmap) != null)
{
if (File.Exists(filename)) { File.Delete(filename); }
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(Clipboard.GetDataObject().GetData(DataFormats.Bitmap), typeof(byte[]));
fs.Write(bytes, 0, bytes.Length);
fs.Close();
fs.Dispose();
}
}
您可以看到,我将所有内容都在"使用"块中。我也"关闭"文件,甚至尝试明确调用"处置"。但是,当我再次运行代码时,它仍然告诉我正在使用该文件。我该怎么做才能覆盖文件?
我也以这种方式尝试过:
using (Bitmap bmp = new Bitmap((Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap)))
{
if (bmp != null)
{
if (File.Exists(filename)) { File.Delete(filename); }
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
bmp.Save(memory, ImageFormat.Bmp);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
memory.Dispose();
}
bmp.Dispose();
break;
}
}
它仍然给我同样的错误。
如果在程序运行之前已经锁定了该文件,则您将无法打开它。查看是否可以使用Unlocker之类的程序解锁。文件解锁后,您应该能够再次打开。
将文件流包装到using{}
语句中时,不需要close();
和dispose();
调用。当代码退出using{}
语句时,它们是为您完成的。打电话给close();
并没有什么伤害,但它是多余的。但是,如果您调用dispose();
,并且使用dispose();
的结束也可能会得到一个例外,因为您在处置对象上调用dispose();
。删除您对close();
和dispose();
如果您通过任务管理器(Mangler)在程序上"结束过程",或在程序内部循环using{}
块中单击IDE内部的"停止"按钮,它将再次锁定文件,您将需要再次使用"解锁器"。
因此,删除您的close()
和dispose()
调用,然后使用" Unlocker"解锁文件。运行您的程序,您应该变成黄金...
更新:
在以下代码周围进行尝试/捕获块:
bmp.Save(memory, ImageFormat.Bmp);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
查看您是否在上述代码中获得例外。如果您围绕它进行尝试/捕捉,可能会指出为什么问题发生了。