2016-11-27 11 views
1

私は自動更新システムを作りました。私はzipファイルをダウンロードした後、もちろん解凍したいと思います。私が単純なアンパックを使用している場合、その作業。C#.net4.5解凍Zipファイル

//System.IO.Compression.ZipFile.ExtractToDirectory(zipPath、extractPath);

しかし、ファイルを上書きしたいときは、アプリケーションクラッシュよりもずっと時間がかかります。 "mscorlib.dllで 'System.IO.IOException'タイプの例外が発生しましたが、ユーザコード" "で処理されませんでした。ファイル名、フォルダ名またはラベル構文が正しくありません。

string zipPath = @""+ System.IO.Directory.GetCurrentDirectory() + "/Temp/"+"1.zip"; 
      string extractPath = @""+ System.IO.Directory.GetCurrentDirectory(); 

      using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
      { 
       foreach (ZipArchiveEntry entry in archive.Entries) 
       { 
        entry.ExtractToFile(Path.Combine(extractPath, entry.FullName),true); 
       } 
      } 

私は問題を解決できません。私は何か悪いを使用していますか?

+0

パス構文が無効であるようです。 'entry.ExtractToFile(Path.Combine(extractPath、entry.FullName)、true);'この行でクラッシュしますか? – NtFreX

+0

うわー、デバッグはここでエラーメッセージで停止します。しかし、私が書いたように、私はSystem.IO.Compression.ZipFile.ExtractToDirectory(zipPath、extractPath)を使用しています。それを解凍しますが、知っているとおり、ファイルを上書きすることはできません。 :) – WinDev

+0

は 'extractPath'と組み合わせて' entry.FullName'を無効なパスにする可能性が最も高いです。それをデバッグして、Path.Combine(extractPath、entry.FullName)の結果を分析してみてください。 – NtFreX

答えて

0
  string zipPath = @""+ System.IO.Directory.GetCurrentDirectory() + "/Temp/"+ currentupdate+".zip"; 
      string extractPath = @""+ System.IO.Directory.GetCurrentDirectory() + "/Temp"; 

      using (ZipArchive archive = ZipFile.OpenRead(zipPath)) 
      { 
        foreach (ZipArchiveEntry entry in archive.Entries) 
        { 
        string fullPath = Path.Combine(extractPath, entry.FullName); 
        if (String.IsNullOrEmpty(entry.Name)) 
        { 
         Directory.CreateDirectory(fullPath); 
        } 
        else 
        { 
         entry.ExtractToFile(fullPath,true); 
        } 
       } 
      } 

これは適切な解決策でした。助けてくれてありがとう。

関連する問題