このリンクHow do I create 7-Zip archives with .NET?によると、WOPRが7z SDK(http://www.7-zip.org/sdk.html)ファイルを圧縮して解凍する7zのSDKを使用する方法
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();
}
}
}
を使用してLMZAでファイルを圧縮する方法(7zの圧縮アルゴリズムを)教えてくださいしかし、それを解凍する方法?
私が試してみてください。
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メソッドと同じ方法で計算されます。しかし、それ以外の方法で出力サイズを計算する方法はありますか?
例外はありますか?エラーメッセージ? – PVitt
I [i]が.INIT() 'm_Coders上とNullReferenceExceptionを取得します。ここではもう少し完全な答えもあり、クラスLiteralDecoder – Djax
の)初期化中に' (: http://stackoverflow.com/は、 a/8775927/220904 – Vando