C# 解压缩后删除 .ZIP 文件

6

我正在使用DotNetZip库中的Ionic.Zip.dll,并尝试在解压缩完成后删除ZIP文件,但我无法成功。

这是我目前的代码:

    using (ZipFile zip = ZipFile.Read(nextVersion + ".zip"))
{
    zip.ExtractAll(Directory.GetCurrentDirectory(), ExtractExistingFileAction.OverwriteSilently);

    try
    {
        File.Delete(nextVersion + ".zip");
    }
    catch (Exception)
    {
        MessageBox.Show("Could not delete ZIP!");
        Environment.Exit(1);
    }
}

我在这里做错了什么?

2
尝试在使用语句之外删除文件。该文件可能仍然被锁定。 - Brian
ZIP文件还在使用中吗?在尝试删除之前,应该关闭文件吗? - Brad
我正在使用相同的 DLL 并尝试删除,你从哪里得到了“File”? - Pomster
4个回答

9

当您尝试删除文件时,会出现异常,这是因为在您尝试删除时文件仍然处于打开状态。将File.Delete的操作移到using块之后。


4

试试这个?

try {
    using (ZipFile zip = ZipFile.Read(nextVersion + ".zip"))
    {
        zip.ExtractAll(Directory.GetCurrentDirectory(), ExtractExistingFileAction.OverwriteSilently);
    }
    File.Delete(nextVersion + ".zip");
}
catch (Exception) {
   MessageBox.Show("Could not delete ZIP!");
   Environment.Exit(1);
}

3

是的!我和Richard Schneider的答案是一样的。zip文件仍然被当前线程访问,您需要先关闭它。

尝试这个

 using (ZipFile zip = ZipFile.Read(nextVersion + ".zip"))
            {
                zip.ExtractAll(Directory.GetCurrentDirectory(), ExtractExistingFileAction.OverwriteSilently);
                zip.Dispose();
                try
                {
                    File.Delete(nextVersion + ".zip");
                }
                catch (Exception)
                {
                    MessageBox.Show("Could not delete ZIP!");
                    Environment.Exit(1);
                }
            }

0

将File.Delete移动到括号外,使用以下方式(ZipFile zip = ZipFile.Read(nextVersion + ".zip"))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接