Vb.net 如何从zip文件中获取单个文件?

Vb.net 如何从zip文件中获取单个文件?,vb.net,extract,unzip,Vb.net,Extract,Unzip,我只想从VB.NET中的.zip文件中获取一个文件。我不需要提取所有.zip文件,只提取一个文件 我正在使用framework 4.5。在 否则你可以用这种方式 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.

我只想从VB.NET中的
.zip
文件中获取一个文件。我不需要提取所有
.zip
文件,只提取一个文件


我正在使用framework 4.5。

否则你可以用这种方式

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

结束使用

.NETFramework4.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
公共共享函数ReadAllBytes(读取器作为BinaryReader)作为Byte()
常量缓冲区大小为整数=4096
将ms用作新内存流()
Dim缓冲区(缓冲区大小)作为字节
将计数设置为整数
做
count=reader.Read(buffer,0,buffer.Length)
如果计数>0,则毫秒写入(缓冲区,0,计数)
在计数为0时循环
返回ToArray女士()
终端使用
端函数

确保您使用的是.NET Framework 4.5或更高版本,并且包含了对
System.IO.Compression
System.IO.Compression.FileSystem

的引用,这将允许您逐行从zip读取txt文件

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

跳过BinaryReader w/ReadAllBytes()辅助函数,改用ExtractToFile():


当然,仍然需要对
System.IO.Compression
System.IO.Compression.FileSystem
的引用。

我不能对上面的答案发表评论,我这里的答案是简化版。不过,我还是推荐这个答案中的helper函数,当你想从zip存档中提取一个项目而不必先将其写入磁盘时,它当然不会编译!导入需要在类/模块声明之上。它编译得很好。这段代码完全符合OP的要求,应该标记为答案,而不是否决票!标记的答案是将文件读入内存,从技术上讲,这不是问题中提出的问题。
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
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