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

怪物MMORPG

有这么差的文档,所以我努力做到这一点

我添加了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,

软件包\ SevenZipSharp.0.64 \ lib \ SevenZipSharp.dll

在此处输入图片说明

本·沃格特

这些是错误的:

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

压缩数据不是UTF-8。而且您不应该尝试将其视为文本。始终将压缩数据以二进制形式存储为byte[]如果您需要通过纯文本通道(例如电子邮件)传递它,请使用Base64编码。

但是从根本上,改变您的想法。压缩不是功能string -> stringbyte[] -> byte[]将其视为也是有效的string -> byte[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章