2017-04-02 62 views
0
private void btn_Backup_Click(object sender, EventArgs e) 
    { 
     List<DirectoryInfo> SourceDir = this.lbox_Sources.Items.Cast<DirectoryInfo>().ToList(); 
     string TargetDir = this.tbox_Target.Text; 

     foreach (DirectoryInfo directory in SourceDir) 
     { 
      foreach (var file in directory.GetFiles()) 
       if (this.checkbox_zipfiles.Checked == true) 
       { 
        System.IO.Compression.ZipFile.CreateFromDirectory(directory.FullName, TargetDir + @"\test.zip"); 
       } 
       else 
       { 
        Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(directory.FullName, TargetDir, true); 
       } 
     } 
    } 

我創建了一個備份應用程序,當我嘗試壓縮文件時,我需要備份它說:「文件'C:\ Users \ Lada1208 \ Desktop \ test \ test。郵編已經存在。「 甚至認爲該文件夾是空的,所以它試圖創建兩次由於某種原因test.zip文件。任何想法爲什麼?IOException文件已存在C#

+1

嗯,是的,是不是你的代碼試圖爲每個目錄創建一個同名的zip?你不應該創建一次文件,然後只是添加文件?或者爲每個目錄選擇一個不同的名字? –

回答

0

正如s.m.所指出的那樣。在上面的註釋中,對ZipFile.CreateFromDirectory()的調用將嘗試爲所有源目錄創建一個具有相同位置和文件名的zip文件。

如果打算從所有源目錄創建包含文件的單個存檔,則不能使用Zipfile.CreateFromDirectory()「快捷方式」方法。相反,您需要調用ZipFile.Open(),獲取ZipArchive對象並使用其CreateEntry()方法分別添加每個文件。

相關問題