Wie die 7z-SDK zum komprimieren und Dekomprimieren einer Datei

Laut diesem link Wie erstelle ich 7-Zip-Archive mit .NET? , WOPR sagen Sie uns, wie komprimieren Sie eine Datei mit LMZA (7z-Kompression Algorithmus) mit 7z SDK ( http://www.7-zip.org/sdk.html )

using SevenZip.Compression.LZMA;
private static void CompressFileLZMA(string inFile, string outFile)
{
   SevenZip.Compression.LZMA.Encoder coder = new SevenZip.Compression.LZMA.Encoder();

   using (FileStream input = new FileStream(inFile, FileMode.Open))
   {
      using (FileStream output = new FileStream(outFile, FileMode.Create))
      {
          coder.Code(input, output, -1, -1, null);
          output.Flush();
      }
   }
}

Aber wie entpacken?

Ich versuche :

private static void DecompressFileLZMA(string inFile, string outFile)
        {
            SevenZip.Compression.LZMA.Decoder coder = new SevenZip.Compression.LZMA.Decoder();
            using (FileStream input = new FileStream(inFile, FileMode.Open))
            {
                using (FileStream output = new FileStream(outFile, FileMode.Create))
                {
                    coder.Code(input, output, input.Length, -1, null);
                    output.Flush();
                }
            }
        }

aber ohne Erfolg.

Haben Sie ein Beispiel?

Dank

PS:
Gemäß einem anderen code http://www.koders.com/csharp/fid43E85EE5AE7BB255C69D18ECC3288285AD67A4A4.aspx?s=zip+encoder#L5 , es scheint, dass der decoder braucht einen header, ein Wörterbuch am Anfang der Datei zu arbeiten. Diese Datei generiert Koders ist nicht ein 7z-Archiv.

   public static void Decompress(Stream inStream, Stream outStream)
    {
        byte[] properties = new byte[5];
        inStream.Read(properties, 0, 5);
        SevenZip.Compression.LZMA.Decoder decoder = new SevenZip.Compression.LZMA.Decoder();
        decoder.SetDecoderProperties(properties);
        long outSize = 0;
        for (int i = 0; i < 8; i++)
        {
            int v = inStream.ReadByte();
            outSize |= ((long)(byte)v) << (8 * i);
        }
        long compressedSize = inStream.Length - inStream.Position;
        decoder.Code(inStream, outStream, compressedSize, outSize, null);
    }

Den überdimensionalen berechnet die gleiche Weise als Ihre Compress-Methode. Aber wie die Berechnung des Ausgabe-Größe anders?

InformationsquelleAutor der Frage Djax | 2011-10-04

Schreibe einen Kommentar