2016-04-27 153 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