在vb.net中解压缩文件

时间:2013-08-13 07:09:03

标签: vb.net gzipstream

我的.exe中有一个嵌入式资源是一个zip文件,我想把它从资源中移出并解压缩到一个特定的文件夹。

Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btn_Install.Click
    Dim Dir_File As String = "C:\FTB"
    Dim Dir_Temp As String = "C:\Temp\Unleashed.zip"

    System.IO.File.WriteAllBytes(Dir_Temp, My.Resources.Unleashed)

    Dim directorySelected As DirectoryInfo = New DirectoryInfo(Dir_Temp)

End Sub

但我无法将.zip文件解压缩到目录中。所以我现在需要的是一种实际提取.zip的方法。

我试过了:

Dim directorySelected As DirectoryInfo = New DirectoryInfo(Dir_Temp)
    For Each fileToDecompress As FileInfo In directorySelected.GetFiles("Unleashed.zip")
        Using OriginalFileStream As FileStream = fileToDecompress.OpenRead()
            Using decompressedFileStream As FileStream = File.Create(Dir_File & "\Unleashed")
                Using decompressionStream As GZipStream = New GZipStream(OriginalFileStream, CompressionMode.Decompress)
                    decompressionStream.CopyTo(decompressedFileStream)
                End Using
            End Using
        End Using
    Next

但所有这一切都给了我一个关于幻数的错误。 非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

您的问题已在此处讨论过:https://stackoverflow.com/a/11273427/2655508

  

GZipStream类不适合以.gz或.zip格式读取压缩档案。它只知道如何解压缩数据,它对存档文件结构一无所知。其中可以包含多个文件,请注意该类如何无法选择要解压缩的存档中的特定文件。

解决方案是使用.NET 4.5,它包含System.IO.Compression命名空间内所需的类及其用于在zip文件中创建,操作和提取项目的方法。

参见例如System.IO.Compression.ZipFileExtensions.ExtractToDirectory()

答案 1 :(得分:1)

Gzip与zip不同。文件格式由文件的2到4个第一个字节标识: 邮编:50 4b 03 04 Gzip:1f 8b 由于您尝试使用gzip解压缩zip文件,因此会收到一条错误消息,主要告诉您文件不是gzip文件。

请参阅     Unzip files programmatically in .net提出类似问题。 有关幻数,请参阅:http://en.m.wikipedia.org/wiki/Magic_number_(programming)

答案 2 :(得分:1)

如果您可以使用.NET 4.5,它会在System.IO.Compression命名空间内提供zip文件操作所需的所有内容。

对于zip操作,您可以考虑使用第三方库,如sharpziplib我在许多项目中成功使用它。

看看这些样本:https://github.com/icsharpcode/SharpZipLib/wiki/Zip-Samples