0

ドキュメントが貧弱なので、これを実行するのに苦労しています

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

ここに画像の説明を入力

4

1 に答える 1

2

これらは間違っています:

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

圧縮データは UTF-8 ではありません。そして、それをテキストとして扱わないでください。圧縮データは常にバイナリ形式でbyte[]. 電子メールなどのテキストのみのチャネルを介して渡す必要がある場合は、Base64 エンコーディングを使用します。

しかし、基本的には、考え方を変えてください。圧縮は関数ではありませんstring -> string。ですbyte[] -> byte[]。と考えることも有効ですstring -> byte[]

于 2014-09-14T17:05:16.593 に答える