このリンクによると、.NET で 7-Zip アーカイブを作成するにはどうすればよいですか? 、WOPR は、7z SDK ( http://www.7-zip.org/sdk.html )を使用して LMZA (7z 圧縮アルゴリズム) でファイルを圧縮する方法を教えてくれます。
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();
}
}
}
しかし、それを解凍する方法は?
私は試します:
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();
}
}
}
しかし、成功しませんでした。
実際の例はありますか?
ありがとう
PS: 他のコードhttp://www.koders.com/csharp/fid43E85EE5AE7BB255C69D18ECC3288285AD67A4A4.aspx?s=zip+encoder#L5によると、デコーダーが機能するには、ファイルの先頭にヘッダーと辞書が必要なようです。 . Koders によって生成されたこのファイルは 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);
}
outSize は Compress メソッドと同じ方法で計算されます。しかし、そうでなければ出力サイズを計算する方法は?