如何使用 SevenZip 压缩/解压缩字符串 - 7Zip

问题描述 投票:0回答:2

文档太差了,所以我很难运行这个

我添加了 dll 文件和正确的引用

最后它压缩字符串,但在解压缩时出现错误

你能告诉我错误在哪里吗?

    public static string SevenZip_CompressString(string text)
    {
        byte[] compressedData = null;

        SevenZipCompressor compressor = new SevenZipCompressor();
        compressor.CompressionMethod = CompressionMethod.Ppmd;
        compressor.CompressionLevel = SevenZip.CompressionLevel.Ultra;
        compressor.ScanOnlyWritable = true;
        compressor.DefaultItemName = "T";

        using (MemoryStream msin = new MemoryStream(Encoding.UTF8.GetBytes(text)))
        {
            using (MemoryStream msout = new MemoryStream())
            {
                compressor.CompressStream(msin, msout);

                compressedData = msout.ToArray();
            }
        }

        return System.Text.Encoding.UTF8.GetString(compressedData);
    }

下面解压

    public static string SevenZip_DE_CompressString(string compressedText)
    {
        byte[] uncompressedbuffer = null;

        using (MemoryStream compressedbuffer = new MemoryStream(Encoding.UTF8.GetBytes(compressedText)))
        {
            using (SevenZipExtractor extractor = new SevenZipExtractor(compressedbuffer))
            {
                using (MemoryStream msout = new MemoryStream())
                {
                    extractor.ExtractFile(0, msout);
                    uncompressedbuffer = msout.ToArray();
                }
            }
        }

        return Encoding.UTF8.GetString(uncompressedbuffer);
    }

我收到错误消息

c#.net 4.5 WPF,

packages\SevenZipSharp.0.64\lib\SevenZipSharp.dll

enter image description here

c# 7zip sevenzipsharp text-compression
2个回答
2
投票

这些都是错误的:

System.Text.Encoding.UTF8.GetString(compressedData)
Encoding.UTF8.GetBytes(compressedText)

压缩数据不是 UTF-8。 而且您不应该尝试将其视为文本。 始终以二进制形式存储压缩数据,如

byte[]
。 如果您需要通过纯文本渠道(例如电子邮件)传递它,请使用 Base64 编码。

从根本上来说,改变你的想法。 压缩不是函数

string -> string
。 是
byte[] -> byte[]
。 将其视为
string -> byte[]
也是有效的。


0
投票

使用这个存储库,它拥有您需要的一切: https://github.com/BrainSlugs83/StringExtensions

GZIP 不适合压缩文本,请使用 deflate 方法,检查该存储库。

© www.soinside.com 2019 - 2024. All rights reserved.