【问题标题】:How to unzip from a stream of Embedded File in c#如何从 C# 中的嵌入式文件流中解压缩
【发布时间】:2023-06-20 05:35:01
【问题描述】:

我的项目中有一个嵌入式 zip 文件。我需要将其解压缩到某个位置。

我不喜欢使用外部库。

    Stream _pluginZipResourceStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("plugin.zip");

我尝试了 GZipStream,但出现了错误!

        using (FileStream decompressedFileStream = File.Create(outputFileName))
        {
            using (GZipStream decompressionStream = new GZipStream(fileStream, CompressionMode.Decompress))
            {
                decompressionStream.CopyTo(decompressedFileStream);
            }
        }

InvalidDataException 未处理:GZip 标头中的幻数不正确。确保您传递的是 GZip 流。

怎么解压???

【问题讨论】:

    标签: c# stream zip embedded-resource unzip


    【解决方案1】:

    GZip 是一种特定的压缩算法,可以但很可能不会在您的 zip 文件中使用。

    如果您使用的是 .NET 4.5,则可以使用 ZipArchive 类。如果没有,请参阅How to extract ZIP file in C#

    【讨论】:

      【解决方案2】:

      如果你有幸使用框架 4.5 或更高版本,你可以使用 ZipArchive 查看:

      http://msdn.microsoft.com/de-de/library/System.IO.Compression%28v=vs.110%29.aspx

      如果您坚持使用 4.0 或更早版本,则必须使用外部库,或将存档转换为 GZip。

      【讨论】:

      • 我应该使用 ZipArchiveEntry.ExtracttoFile 吗?
      • 取决于您在 zip 文件中存储的内容。如果您在那里压缩了多个文件,并且只想获取那个文件,那么 ZipArchiveEntry.ExtractToFile 是您的选择。如果您只想解压缩所有文件,即使您只有一个文件,我更喜欢 ZipArchive.ExtractToDirectory。希望对您有所帮助。
      • 很高兴听到这个消息。将答案标记为已解决或至少是一个赞成票将是一个很好的表示感谢。