2015-02-28 5 views
0

Я пытаюсь извлечь мою программу .zip-файл, доставить его содержимое в папку, показывая прогресс в панели прогресса. Если я немного вернусь к тому, что будет работать на уровне progressbar, я также буду apprieciate, если «Unzipper» может просто переключиться на другую форму. Heres код я в настоящее время есть для извлечения:Может ли извлечение Shell32 работать с панелью прогресса?

Dim sc As New Shell32.Shell() 
    'Create directory in which you will unzip your files . 
    IO.Directory.CreateDirectory("C:\Users\NikolajBanke\Desktop\Test\Unzipped") 
    'Declare the folder where the files will be extracted 
    Dim output As Shell32.Folder = sc.NameSpace("C:\Users\NikolajBanke\Desktop\Test\Unzipped") 
    'Declare your input zip file as folder . 
    Dim input As Shell32.Folder = sc.NameSpace("C:\Users\NikolajBanke\Desktop\Test\peace.zip") 
    'Extract the files from the zip file using the CopyHere command . 
    output.CopyHere(input.Items, 4) 

Спасибо за любую помощь, я хотел бы получить :)

+0

Почему это не работает? Вы не видите индикатор выполнения или получаете ошибки? – Bono

+0

Это действительно работает, но у меня нет индикатора выполнения. Я не знаю, как получить процесс извлечения, отображаемый в панели прогресса. :) – nikko4913

ответ

0

Изменение output.CopyHere(input.Items, 4) к output.CopyHere(input.Items, 16) Теперь вы получите прогресс бар.

0

На мой взгляд, ZipArchive лучше, потому что вы можете обрабатывать событие progressbar, не забудьте указать ссылку «System.IO.Compression».

Public Async Function Extraer(zipFilePath As String, extractPath As String) As Task 
    Dim elzip As ZipArchive = ZipFile.OpenRead(zipFilePath) 
    Dim lacuenta As Integer = elzip.Entries.Count 
    For i = 0 To lacuenta - 1 
     Dim entry As ZipArchiveEntry = elzip.Entries(i) 
     If entry.Name.Trim = "" Then 
      My.Computer.FileSystem.CreateDirectory(Path.Combine(extractPath, entry.FullName)) 
     Else 
      Try 
       entry.ExtractToFile(Path.Combine(extractPath, entry.FullName)) 
      Catch ex As Exception 
      End Try 
     End If 
     ProgressBar1.Value = (i/(lacuenta - 1)) * 100 
    Next 
End Function