我正在使用 7zip sdk (http://www.7-zip.org/sdk.html) 来压缩文件。
使用这个包装器效果很好:
public void EncodeSingleFile(FileStream inStream, FileStream outStream) {
bool eos = false;
Int32 dictionary = 1 << 21;
Int32 posStateBits = 2;
Int32 litContextBits = 3; // for normal files
// UInt32 litContextBits = 0; // for 32-bit data
Int32 litPosBits = 0;
// UInt32 litPosBits = 2; // for 32-bit data
Int32 algorithm = 2;
Int32 numFastBytes = 128;
string mf = "bt4";
propIDs = new CoderPropID[]
{
CoderPropID.DictionarySize,
CoderPropID.PosStateBits,
CoderPropID.LitContextBits,
CoderPropID.LitPosBits,
CoderPropID.Algorithm,
CoderPropID.NumFastBytes,
CoderPropID.MatchFinder,
CoderPropID.EndMarker
};
properties = new object[]
{
dictionary,
posStateBits,
litContextBits,
litPosBits,
algorithm,
numFastBytes,
mf,
eos
};
Encoder encoder = new Encoder();
encoder.SetCoderProperties(propIDs, properties);
encoder.WriteCoderProperties(outStream);
Int64 fileSize = inStream.Length;
for (int i = 0; i < 8; i++)
{
outStream.WriteByte((Byte) (fileSize >> (8*i)));
}
encoder.Code(inStream, outStream, -1, -1, null);
但是,我遇到了一个问题:
我只能用从7-zip.org安装的7zip shell解压,不能用unrar解压。如果我设置一些参数并且它也可以与 unrar 一起使用,这可能吗?
如果我在 7zip 中打开文件并检查属性,我得到:
- 姓名:abc.pdb
- 大小:1 809 920
- 包装尺寸:249 305
- 方法:LZMA:21
- 类型:lzma
最佳答案
CodeProject 上有一个示例,其中有人使用 SDK 为 7z 创建了 C# 界面。他还提到现在可以针对 DLL 使用 COM,但我不知道它是如何工作的。
关于c# - 使用 7zip sdk 压缩文件,但存档文件不是原始文件,无法使用 unrar 解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8340636/