Secondo questo link How do I create 7-Zip archives with .NET?, WOPR ci dicono come comprimere un file con LMZA (algoritmo di compressione 7z) utilizzando 7z SDK (http://www.7-zip.org/sdk.html)Come utilizzare l'SDK 7z per comprimere e decomprimere un file
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();
}
}
}
Ma come decomprimerlo?
cerco:
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();
}
}
}
ma senza successo.
Avete un esempio funzionante?
Grazie
PS: Secondo un altro codice http://www.koders.com/csharp/fid43E85EE5AE7BB255C69D18ECC3288285AD67A4A4.aspx?s=zip+encoder#L5, sembra che il decoder ha bisogno di un colpo di testa, un dizionario all'inizio del file da lavorare. Questo file generato da Koders non è un archivio 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);
}
L'outSize viene calcolato allo stesso modo del metodo Compress. Ma come calcolare la dimensione in uscita altrimenti?
Ci sono delle eccezioni? Messaggio di errore? – PVitt
ottengo un NullReferenceException su 'm_Coders [i] .init();' in Init() della classe LiteralDecoder – Djax
C'è anche un po 'di risposte più complete qui: http://stackoverflow.com/ a/8775927/220904 – Vando