无法删除由SharpZipLib创建的Zip文件(FastZip)

时间:2008-12-04 11:31:06

标签: c# file sharpziplib

我正在使用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

5 个答案:

答案 0 :(得分: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,但我喜欢明确它。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

也许防病毒正忙着检查文件?如果没有,那么得到一个程序,可以告诉你哪些程序有文件打开。

你可以看一下:

答案 3 :(得分:0)

我对FastZip API并不熟悉(所以这只是一个平底船),但你需要用fZip.Close();

之类的东西关闭存档吗?

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

答案 4 :(得分:0)

确保在完成后关闭SharpZipLib ,可以通过将其构造包装在“using”语句中来实现...

using(Stream s = new SharpZipLibStream())
{
   /*...do stuff, zip stuff.../
}