2016-11-27 2 views
1

Я сделал автоматическую систему обновления, и после загрузки zip-файла я хочу, конечно, распаковать. Если я использую простую распаковку, ее работа.C# .net4.5 Unpack Zip file

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

Но когда я хочу перезаписывать файлы, все время приходится сбой приложения. «Исключение типа« System.IO.IOException »произошло в mscorlib.dll, но не было обработано в коде пользователя« «Имя файла, имя папки или синтаксис ярлыка не верны».

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

скорее всего является 'entry.FullName' в сочетании с' extractPath' недопустимым путем. попробуйте отладить его и проанализировать результат «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); 
        } 
       } 
      } 

Это было правильное решение. Спасибо за помощь.