2008-12-04 304 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()。

看看你的代碼中的任何其他項目,可能會對文件持有鎖定;如果可能,嘗試處置()或關閉()這些項目。