2

我正在使用 SharpZipLib 中的 FastZip 类创建一个 zip 文件,一旦我关闭程序后,我就无法删除该文件,因为:

“无法删除 zip.zip:它正被其他人或程序使用。关闭所有可能正在使用该文件的程序,然后重试。”

生成文件的代码就是这样的:

fZip.CreateEmptyDirectories = true;
fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);

我尝试使用:

            using (FastZip fZip = new FastZip())
            {
                try
                {
                    fZip.CreateEmptyDirectories = true;
                    fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);
                }
                catch (Exception)
                {
                }
            }

但它不会转换为 iDisposable

4

5 回答 5

3

看起来它可能是 SharpZipLib 的一个错误。FastZip.CreateZip 方法具有三个重载,其中两个创建使用 File.Create,例如:

CreateZip(File.Create(zipFileName), // ...

它似乎没有关闭流,所以你最好使用:

string zipFileName = System.IO.Path.Combine(filesPath, this.zipName);
using (Stream stream = File.Create(zipFileName))
{
    fZip.CreateZip(stream, filesPath, false, this.zipFilter, null);
    stream.Close();
}

从技术上讲,您不需要在 using 块中调用 Close,但我喜欢明确说明。

于 2008-12-04T23:43:43.297 回答
2

我实际上只是自己解决了这个问题。原来它不是 SharpZipLib/FastZip。我正在通过 System.Net.Mail 发送一封电子邮件,并将 FastZipped 文件作为附件附加到该电子邮件。当我试图删除附件时,我遇到了您收到的错误。事实证明,我所要做的就是在发送电子邮件后调用 MailMessage.Dispose() 。

查看代码中可能锁定文件的任何其他项目;如果可能,尝试 dispose() 或 close() 这些项目。

于 2011-09-15T15:34:20.443 回答
1

也许防病毒软件正忙于检查文件?如果没有,请获取一个可以告诉您哪些程序打开了文件的程序。

你可以看看:

于 2008-12-04T11:37:02.827 回答
0

我不熟悉 FastZip API(所以这只是一个平局),但你需要用 fZip.Close(); 之类的东西关闭存档吗?

我原以为关闭程序会做同样的事情,但只是猜测。

于 2008-12-04T12:08:41.483 回答
0

确保在完成后关闭 SharpZipLib,您可以通过将其构造包装在“使用”语句中来做到这一点......

using(Stream s = new SharpZipLibStream())
{
   /*...do stuff, zip stuff.../
}
于 2008-12-04T12:19:21.073 回答