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



我已经尝试了许多不同的方法来执行此操作,并且在我尝试将其删除之前,它仍在告诉我该文件正在使用。

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

查看您是否在上述代码中获得例外。如果您围绕它进行尝试/捕捉,可能会指出为什么问题发生了。

相关内容

  • 没有找到相关文章

最新更新