2015-02-06 48 views

回答

2

的.NET Framework 4.5已經ZipFile類可爲你做這個。此代碼應該讓你開始:

Dim zipPath As String = "Sample.zip" 
Using archive = ZipFile.Open(zipPath, ZipArchiveMode.Read) 
    Dim entry = archive.GetEntry("MyFile.pdf") 
    Using reader As New BinaryReader(entry.Open()) 
    System.IO.File.WriteAllBytes("MyFile.pdf", ReadAllBytes(reader)) 
    End Using 
End Using 

ReadAllBytes()是提取從二進制流中的所有字節的一個輔助方法:

Public Shared Function ReadAllBytes(reader As BinaryReader) As Byte() 
    Const bufferSize As Integer = 4096 
    Using ms As New MemoryStream() 
     Dim buffer(bufferSize) As Byte 
     Dim count As Integer 
     Do 
      count = reader.Read(buffer, 0, buffer.Length) 
      If count > 0 Then ms.Write(buffer, 0, count) 
     Loop While count <> 0 

     Return ms.ToArray() 
    End Using 
End Function 

確保您使用.NET Framework 4.5或以上,你已包括對System.IO.CompressionSystem.IO.Compression.FileSystem的引用。

0

嘗試用這個代碼的DotNetZip

Using zip As ZipFile = ZipFile.Read(ExistingZipFile) 
    Dim e As ZipEntry = zip("DocumentToFind.txt") 
    e.Extract(OutputStream) 
End Using 

的幫助,否則,你可以以這種方式使用ZipArchiveClass

Using zip As ZipArchive = ZipFile.Open(zipfile, ZipArchiveMode.Read) 
Dim file = zip.Entries.Where(Function(x) x.Name = "fileToFind") 
If file IsNot Nothing Then 
    file.ExtractToFile("yourFile") 

End If 

末使用

0

這將允許您通過線

Dim zipPath As String = "ZIP FILE LOCATION" 
     Using zipStream = New FileStream(last_pafx23_open, FileMode.Open) 
      Using archive = New ZipArchive(zipStream, ZipArchiveMode.Read) 
       For Each ent In archive.Entries 
        MsgBox(ent.ToString) 
        Using stream = ent.Open() 
         Using reader = New StreamReader(stream) 
          While Not reader.EndOfStream 
           MsgBox(reader.ReadLine) 
          End While 
         End Using 
        End Using 
       Next 
      End Using 
     End Using 
-1

讀從一個zip線txt文件跳過BinaryReader在W/ReadAllBytes()輔助函數,使用ExtractToFile()代替:

Imports System.IO.Compression 

Using archive = ZipFile.Open("Sample.zip", ZipArchiveMode.Read) 
    Dim entry = archive.GetEntry("MyFile.pdf") 
    If entry IsNot Nothing then entry.ExtractToFile("MyFile.pdf") 
End Using 

仍當然需要參考System.IO.CompressionSystem.IO.Compression.FileSystem

+0

我不能評論頂部的答案,我的答案在這裏是一個簡化版本。儘管如此,當我希望從zip壓縮文件中提取項目而不必首先將其寫入磁盤時,我確實在該答案中稱讚了幫助函數。 – 2016-12-16 22:22:12

+0

不編譯 – stigzler 2017-08-19 08:26:02