使用7zip SDK压缩文件,但归档文件不是原始的,无法使用unrar解压
本文关键字:解压 unrar 原始 压缩 SDK 7zip 文件 使用 归档文件 | 更新日期: 2023-09-27 18:16:14
我使用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
- Size: 1 809 920
- 包装尺寸:249 305
- 方法:LZMA: 21
- 类型:lzma
在CodeProject上有一个使用SDK为7z创建c#接口的例子。他还提到现在可以对DLL使用COM,但我不知道这是如何工作的。
查看c# (. net) Interface for 7-Zip Archive dll on The Code Project
如果您希望创建RAR存档,那么您可能不太幸运,因为它是闭源的。你可以使用外部库,但是压缩算法是私有的。
来自RAR Wiki页面:
RAR文件只能使用商业软件WinRAR、RAR和获得许可方Alexander Roshal许可的软件创建
我建议从众多不受阻碍的替代方案中选择一个。