2011-12-01 28 views
1

我使用7zip sdk(http://www.7-zip.org/sdk.html)来压缩一个文件文件。使用7zip sdk来压缩文件,但归档文件不是原来的,并且不能使用unrar来解压缩

它使用这种包装工作正常:

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的外壳解压,不能用unrar解压缩。如果我设置了一些参数,那么它可能会与unrar一起工作吗?

如果我打开7zip的文件,并检查属性,我得到:

  • 名称:abc.pdb
  • 尺寸:1 809 920
  • 包装尺寸:249 305
  • 方法:LZMA:21
  • 类型:LZMA
+0

如果您在7-Zip中打开您的档案,并检查属性,它对“类型”说什么? – Cylindric

+0

我更新了我的问题中的信息,它是:lzma – olidev

+0

如果我使用7zip shell进行压缩,则7zip文件的类型为:7z。哼哼,奇怪....你有什么想法我做错了什么? – olidev

回答

1

在CodeProject上有一个人为使用SDK为7z创建一个C#接口的例子。他还提到现在可以使用COM来对付DLL,但我不知道它是如何工作的。在代码项目中检出C# (.NET) Interface for 7-Zip Archive DLLs

+0

这是与DLL,我想避免,所以我去使用SDK。它工作到目前为止,但问题是,它不能用winrar解压缩。我正在努力解决这个问题。谢谢 – olidev

0

如果您正在寻找创建一个RAR压缩包,你可能不太好,因为它是封闭的。您可以使用外部库,但压缩算法是专有的。

RAR Wiki Page

RAR文件只能与商业软件的WinRAR,RAR创建,并有权从许可软件亚历山大·罗肖尔

我会建议调查的一个许多没有阻碍的替代品。

+0

不行,目的就是让它变成7z。但问题是我从sdk得到的结果无法使用winrar解压缩。如果我使用7z的shell执行压缩。然后,我可以使用winrar解压缩 – olidev

+0

啊,那么就够了。我想也许它是使用WinRAR不理解的7-zip格式的变体。我不认为“不使用WinRAR”是一种选择? :) – Cylindric

+0

它*有*为7z格式吗?我已经使用[Ionic DotNetZip](http://dotnetzip.codeplex。com /)库取得巨大成功,但它创建了zip压缩文件。 – Cylindric

相关问题