【问题标题】:How to compress / decompress string with using SevenZip - 7Zip如何使用 SevenZip - 7Zip 压缩/解压缩字符串
【发布时间】:2014-09-14 15:31:03
【问题描述】:

文档太差了,所以我很难做到这一点

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

【问题讨论】:

  • 您是否从查看详细信息中检查了 InnerException... 您发布的异常窗口底部的链接?
  • 我不知道为什么,但我很确定你会在上一个关于数据库压缩的问题之后问这个问题......
  • @SivaGopal 内部异常为空
  • @MatíasFidemraizer 如果你知道答案我很感激
  • @MonsterMMORPG 我没有答案,但我怀疑你发现了问题,2 分钟后你来这里让其他人进行调查......我的意思是,慢慢来(1 -2 小时,做你的试错)在提问之前。这只是一个建议...... :)

标签: c# 7zip sevenzipsharp text-compression


【解决方案1】:

这些都是错误的:

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

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

不过,从根本上改变你的想法。压缩不是函数string -> string。这是byte[] -> byte[]。将其视为string -> byte[] 也是有效的。

【讨论】:

  • 我说——将压缩数据存储为byte[]
  • 是的,就像您可以将其存储在 SQL Server 中一样 :) 但我解决了您所说的问题。
猜你喜欢
  • 2019-10-15
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多