2013-10-28 137 views
0

我想通過將其添加到zip文件來替換某些文件。我的意思是在創建zip之後,我不應該再在文件夾中看到這些文件。使用dontnetzip壓縮文件

我能夠使用dotNetZip的庫壓縮文件。但是原始文件仍然存在。由於我已經壓縮了他們,我不再需要他們在該文件夾中。

我試圖刪除它們(使用file.delete),但我得到一個錯誤,該文件正在被程序使用。

這是我寫的://編輯

var files = directory.GetFiles("*.csv", SearchOption.AllDirectories); 
      try 
      { 

       using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) 
       { 

        foreach (var file in files) 
        { 


         sendEmail.SendMailMessage(file.FullName); 


      //   zip.AddFile(file.FullName); 



        } 


    // zip.Save(Path.Combine(filePath,dirDate, "logs.zip")); 


       } 

       foreach (var file in files) 
       { 
        File.Delete(file.FullName); 
       } 

      } 


      catch (Exception e) 
      { 

       Console.WriteLine(e.ToString()); 
      } 





     } 

這可能是愚蠢的,但我真的很堅持。請指導。

我得到的錯誤是:

System.IO.IOException: The process cannot access the file 'D:\***.csv' because it is being used by another process. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.File.InternalDelete(String path, Boolean checkHost) 
    at System.IO.File.Delete(String path) 
    at Program.Main(String[] args) in d:\Documents\\** 
+0

你缺少一個'}',你有沒有在Explorer中打開的文件夾? – Ofiris

回答

1

在你的代碼沒有使用任何File.Delete()方法 - 請務必提供創建錯誤代碼。

但是,很可能你只是試圖刪除using -block內的文件。當您將文件添加到您的zip文件時,它們將被訪問並鎖定,因此您無法刪除他。一旦ZipFile對象被釋放,文件也將被釋放。

var files = directory.GetFiles("*.csv", SearchOption.AllDirectories); 

using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) 
{ 
    foreach (var file in files) 
    { 
     zip.AddFile(file.FullName); 
    } 

    zip.Save(Path.Combine(filePath, dirDate, "logs.zip")); 
} 

// Outside of using block 
foreach (var file in files) 
{ 
    File.Delete(file.FullName); 
} 
+1

我寧願將文件名存儲在列表中,因爲假設在壓縮過程中可以創建一個新的csv文件,並且在不添加到壓縮文件時刪除它。 – Silvermind

+0

@Silvermind好點,我相應地更改了我的代碼。我還添加了'Path.Combine',而不是手動連接路徑。 – user2674389

+0

我做了你的建議[在編碼中進行編輯]。但是我得到了同樣的錯誤。 – user2901683