我已经尝试了很多不同的方法来执行此操作,并且在我再次保存之前尝试删除该文件时,它仍在告诉我该文件正在使用中。
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();
}
}
正如你所看到的,我在"使用"块。我也"关闭"该文件,甚至尝试明确调用" 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;
}
}
它仍然给我同样的错误。
答案 0 :(得分:0)
如果文件在程序运行之前已经被锁定,您将无法打开它。看看您是否可以使用Unlocker等程序解锁它。文件解锁后,您应该可以再次打开它。
将文件流包装到using{}
语句中时,不需要close();
和dispose();
次调用。当代码退出using{}
语句时,它们就会为您完成。拨打close();
并没有什么坏处,但这是多余的。但是,如果您拨打dispose();
,并且使用结束时调用dispose();
,则可能会因为您在已处置对象上调用dispose();
而获得异常。移除您对close();
和dispose();
如果您通过任务管理器(mangler)对程序进行“处理”,或者在程序在using{}
块内循环时单击IDE内的“停止”按钮,它将再次锁定文件并且您我需要再次使用'Unlocker'。
因此,请移除close()
和dispose()
来电,然后使用'解锁'解锁文件。运行你的程序,你应该是金色的......
更新:
在以下代码周围放置一个try / catch块:
bmp.Save(memory, ImageFormat.Bmp);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
查看您是否在上面的代码块中遇到异常。如果你把try / catch放在它周围,它可能会指出问题发生的原因..