2016-04-27 180 views
0

我想提取一個zip文件,它應該檢查zip文件中是否有文件夾。如果是,它應該提取到與其中的文件夾相同的文件夾。如果沒有,它應該採用zipfolder名稱。提取文件夾中的Zip文件

我的問題是,我總是得到一個異常,路徑的一部分找不到,但如果我打開zip文件在那裏。

我絕望!

private void CreateZipContentFolder(string zipsPath, string destinationPath) { 
     Zips = Directory.GetFiles(zipsPath, "*.zip", SearchOption.TopDirectoryOnly).ToList(); 
     if (Zips.Count != 0) { 

      MyLog.WriteToLog("Creating Folder of ZipFiles... From: " + zipsPath + " To: " + destinationPath, MyLog.Messages.Info); 

      foreach (string zip in Zips) { 
       FileInfo fileInfo = new FileInfo(zip); 
       string dirName = destinationPath + "\\" + fileInfo.Name.Substring(0, fileInfo.Name.Length - 4); 

       using (ZipArchive archive = ZipFile.OpenRead(zip)) { 

        foreach (ZipArchiveEntry entry in archive.Entries) { 

         if (entry.FullName.EndsWith("/")) { 

          try { 
           ZipFile.ExtractToDirectory(zip, destinationPath); 
          } catch (IOException e) { 
           MyLog.WriteToLog(e.Message, MyLog.Messages.Error); 
          } 
          break; 

         } else if (new FileInfo(dirName).Exists == false) { 

          try { 
           Directory.CreateDirectory(dirName); 
           ZipFile.ExtractToDirectory(zip, dirName); 
          } catch (IOException e) { 
           MyLog.WriteToLog(e.Message, MyLog.Messages.Error); 
          } 
          break; 
         } 
        } 
       } 
      } 
      MyLog.WriteToLog("Created Temporary Folders", MyLog.Messages.Info); 
     } else { MyLog.WriteToLog("No Zips Found in: " + zipsPath, MyLog.Messages.Warning); } 
    } 

更新:異常

System.IO.DirectoryNotFoundException了未處理的HResult = -2147024893

消息=找不到路徑的一部分「P:\ Documents_UBS_AM \ Projekte \ DataCompare \新建\包4 \ AssetPerformance.txt」。

源= mscorlib程序

+0

您正在使用'FileInfo'來檢查目錄,當你應該使用'DirectoryInfo' – Nkosi

回答

0

我做你的代碼的一些測試,但在此之前 - 我所做需要重構。你的代碼真的需要它。我已經刪除了所有的「日誌」行,但我認爲 - 你會明白如何使用它。它應該可以工作,但是你使用了一些非常糟糕的解決方案來做簡單的事情,這可能是你例外的原因。

private void CreateZipContentFolder(List<String> zips, string destinationPath) 
    { 
     if (zips.Any()) 
     { 
      foreach (string zip in zips) 
      { 
       string dirName = Path.Combine(destinationPath, Path.GetFileNameWithoutExtension(zip)); 

       using (ZipArchive archive = ZipFile.OpenRead(zip)) 
       { 
        foreach (ZipArchiveEntry entry in archive.Entries) 
        { 
         if (entry.FullName.EndsWith("/")) 
         { 
          ZipFile.ExtractToDirectory(zip, destinationPath); 
          break; 
         } 
         else if (!Directory.Exists(dirName)) 
         { 
          Directory.CreateDirectory(dirName); 
          ZipFile.ExtractToDirectory(zip, dirName); 
          break; 
         } 
        } 
       } 
      } 
     } 
    } 

也可以請你提供類似「文件樹」的東西,如果它沒有開始爲你工作?

+0

嗨,感謝你的偉大的維修人員!但它不適用於相同的例外情況。我知道那不是因爲你的代碼。但我找不到問題...我可以給你發送像我的項目那麼大嗎?因爲我沒有找到它整個一天.. – Ams1

+0

@ Ams1嗨,你可以上傳你的項目到github例如。但實際上,我想你在文件修改時遇到了一些問題,而不是代碼。 – user2216

+0

是的,我發現了這個問題。這是因爲我總是對很多人做出了\ \。但是你的awnser無論如何幫助我,謝謝! – Ams1