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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage ist ein wenig alt, aber google nicht bieten eine befriedigende Antwort, so ist dies für alle, die wie ich noch suchen es aus. Wenn Sie einen Blick in die LMZAAlone-Ordner der SDK gibt es code, komprimiert und dekomprimiert Dateien. Verwenden Sie es als ein Beispiel, es würde scheinen, die Sie brauchen, um schreiben und Lesen der encoder-Eigenschaften und dekomprimiert die Datei-Größe Ihrer Ausgabedatei:
Beachten Sie, dass die Dateien, die so erstellt werden kann, extrahiert das 7zip Programm als gut, aber nicht behalten Ihren Dateinamen ein oder andere Metadaten.
InformationsquelleAutor der Antwort Fr33dan
Empfehle ich es geschafft-lzma:
https://github.com/weltkante/managed-lzma
Bewahrt es Infos zur Datei-und Verzeichnis-Struktur im Datei-Codierung.
InformationsquelleAutor der Antwort SepehrM