2016-04-27 22 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); } 
    } 

更新:\ Documents_UBS_AM \ Projekte \ DataCompare:

System.IO.DirectoryNotFoundExceptionが HRESULT = -2147024893

メッセージ=パスの一部が見つかりませんでした「P未処理の例外でした\ New \ package4 \ 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

こんにちは、あなたの素晴らしいawnserのおかげで!同じ例外を除いては機能しません。私はそれがあなたのコードのためではないことを知っています。しかし、私は問題を見つけることができません...私はそれほど大きくない私のプロジェクトのようにあなたを送ることができますか?私は一日中それを見つけることができなかったので。 – Ams1

+0

@ Ams1こんにちは、あなたはgithubにあなたのプロジェクトをアップロードすることができます。しかし、実際には、コードではなく、ファイルpathesにいくつかの問題があると思います。 – user2216

+0

はい問題が見つかりました。なぜなら私はいつもたくさんのことをしたからです。とにかく感謝してくれます。 – Ams1

関連する問題