De acuerdo con este enlace How do I create 7-Zip archives with .NET?, WOPR nos dice cómo comprimir un archivo con LMZA (algoritmo de compresión 7z) usando 7z SDK (http://www.7-zip.org/sdk.html)Cómo utilizar el SDK 7z para comprimir y descomprimir un archivo
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();
}
}
}
Pero cómo descomprimirlo?
Trato:
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();
}
}
}
pero sin éxito.
¿Tiene un ejemplo de trabajo?
Gracias
PS: De acuerdo con otro código http://www.koders.com/csharp/fid43E85EE5AE7BB255C69D18ECC3288285AD67A4A4.aspx?s=zip+encoder#L5, parece que el descodificador necesita un encabezado, un diccionario en el principio del archivo para trabajar. Este archivo generado por Koders no es un archivo 7z.
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);
}
El outSize se calcula de la misma manera que su método Compress. Pero ¿cómo calcular el tamaño de salida de lo contrario?
¿Hay alguna excepción? ¿Error de mensajes? – PVitt
me siento un NullReferenceException en 'm_Coders [i] .init();' en Init() de la clase LiteralDecoder – Djax
Hay también un poco más respuestas completas aquí: http://stackoverflow.com/ a/8775927/220904 – Vando