无法保存文件,因为它正在使用中

时间:2016-12-13 15:00:39

标签: c# filestream bmp filelock file-in-use

我已经尝试了很多不同的方法来执行此操作,并且在我再次保存之前尝试删除该文件时,它仍在告诉我该文件正在使用中。

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;
    }
}

它仍然给我同样的错误。

1 个答案:

答案 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放在它周围,它可能会指出问题发生的原因..