如何使用7zSDK压缩和解压文件按此链接如何使用.NET创建7-Zip压缩文件?,WOPR告诉我们如何使用7zSDK(http://www.7-zip.org/sdk.html)使用SevenZip.Compression.LZMA使用LMZA(7z压缩算法)压缩文件;privatestaticvoidCompressFileLZMA(stringinFile,stringoutFile){SevenZip.Compression.LZMA.Encodercoder=newSevenZip.Compression.LZMA.Encoder();使用(FileStreaminput=newFileStream(inFile,FileMode.Open)){使用(FileStreamoutput=newFileStream(outFile,FileMode.Create)){coder.Code(输入,输出,-1,-1,null);输出.冲洗();但是如何解压呢?我尝试:privatestaticvoidDecompressFileLZMA(stringinFile,stringoutFile){使用(FileStreaminput=newFileStream(inFile,FileMode.Open)){使用(FileStreamoutput=newFileStream(outFile,FileMode.Create)){coder.Code(输入,输出,input.Length,-1,null);输出.冲洗();}}}但没有成功。你有一个有效的例子吗?谢谢PS:根据其他代码http://www.koders.com/csharp/fid43E85EE5AE7BB255C69D18ECC3288285AD67A4A4.aspx?s=zip+encoder#L5,似乎解码器需要一个标题,文件开头的字典才能工作.这个由Koders生成的文件不是7z档案。publicstaticvoidDecompress(StreaminStream,StreamoutStream){byte[]properties=newbyte[5];inStream.Read(属性,0,5);SevenZip.Compression.LZMA.Decoder解码器=新的SevenZip.Compression.LZMA。解码器();解码器.SetDecoderProperties(属性);长输出大小=0;for(inti=0;i<8;i++){intv=inStream.ReadByte();outSize|=((long)(byte)v)<<(8*i);}longcompressedSize=inStream.Length-inStream.Position;decoder.Code(inStream,outStream,compressedSize,outSize,null);outSize的计算方式与其Compress方法相同。但是如何计算输出大小呢?这个问题有点老了,但是谷歌没能提供满意的答案,所以这是给像我这样还在寻找的人的。如果您查看SDK的LMZAAlone文件夹,则有压缩和解压缩文件的代码。以此为例,看起来您需要写入和读取编码器属性并将文件大小解压缩到输出文件:privatestaticvoidCompressFileLZMA(stringinFile,stringoutFile){SevenZip.Compression.LZMA.Encodercoder=newSevenZip.Compression.LZMA.Encoder();FileStreaminput=newFileStream(inFile,FileMode.Open);FileStreamoutput=newFileStream(outFile,FileMode.Create);//编写编码器属性coder.WriteCoderProperties(output);//写入解压文件size.output.Write(BitConverter.GetBytes(input.Length),0,8);//编码文件.coder.Code(input,output,input.Length,-1,null);output.Flush();输出.关闭();}privatestaticvoidDecompressFileLZMA(stringinFile,stringoutFile){SevenZip.Compression.LZMA.Decodercoder=newSevenZip.Compression.LZMA.Decoder();FileStreaminput=newFileStream(inFile,FileMode.Open);FileStreamoutput=newFileStream(outFile,FileMode.Create);//读取解码器属性byte[]properties=newbyte[5];input.Read(属性,0,5);//读入解压文件size.byte[]fileLengthBytes=newbyte[8];input.Read(文件长度字节,0,8);longfileLength=BitConverter.ToInt64(fileLengthBytes,0);编码器.SetDecoderProperties(属性);编码器。代码(输入,输出,输入。长度,文件长度,空);输出.冲洗();输出.关闭();请注意,以这种方式创建的文件也可以通过7zip程序提取,但不会保留它们的文件名或任何其他元数据我强烈推荐managed-lzma:https://github.com/weltkante/managed-lzma它保留文件信息和文件编码中的目录结构。以上就是C#学习教程:如何使用7zSDK压缩和解压文件分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
