2008-12-04 64 views
2

我使用的是类FastZip从SharpZipLib和一次我后,我关闭该程序创建一个zip文件,我不能删除该文件,因为:无法删除创建者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的

回答

1

也许杀毒忙着检查文件?如果没有,然后得到一个程序,可以告诉你哪些程序有文件打开。

你可以看一下:

+0

不,关闭杀毒软件,它仍然不希望我删除它。解锁者也没有帮助。 – LuRsT 2008-12-04 12:02:19

+0

SysInternals Process Explorer也应该能够告诉你谁拥有该文件。 http://www.sysinternals.com – GalacticCowboy 2008-12-04 12:19:43

+0

Unlocker做到了。我一开始没有看到删除选择框。 – LuRsT 2008-12-10 18:42:47

0

我不熟悉并且与FastZip API(所以这只是一个平底船),但你需要关闭归档类似fZip.Close();

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

+0

虽然我也是这样,但fastZip类没有它:( – LuRsT 2008-12-04 12:10:15

0

请务必关闭SharpZipLib 你用它完成后,你可以通过包装它的建筑内部的“使用”的声明这样做......

3

它看起来像它可能是SharpZipLib的一个bug。该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(); 
} 

从技术上讲,你不需要在使用块中调用Close,但我喜欢明确地说明它。

3

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

看看你的代码中的任何其他项目,可能会对文件持有锁定;如果可能,尝试处置()或关闭()这些项目。

相关问题