首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式对静态LZMA压缩文件进行LZMA解压缩

以编程方式对静态LZMA压缩文件进行LZMA解压缩
EN

Stack Overflow用户
提问于 2012-02-10 06:17:20
回答 2查看 1.1K关注 0票数 0

我正在使用LZMA解压一个资源文件,这个文件是我早先使用lzma e <infile> <outfile> -lc0 -lp2从终端压缩并导入到我的项目中的。但是,当应用于此文件时,LzmaDec_DecodeToBuf在第一次迭代中返回1,即LZMA data error。(此时inLen始终为5outLen0。)

为什么会这样呢?

我的代码是:

代码语言:javascript
运行
复制
SRes static decompress(FILE *inFile, FILE *outFile)
{
  // Position the inFile pointer at the start.
  fseek(inFile, 0, SEEK_SET);

  // Read in LZMA properties (5 bytes) and uncompressed size (8 bytes, little-endian) to header.
  char unsigned header[LZMA_PROPS_SIZE+8];
  fgets(header, sizeof(header), inFile);
  CLzmaDec state;
  LzmaDec_Construct(&state);
  SRes res = LzmaDec_Allocate(&state, header, LZMA_PROPS_SIZE, &SzAllocForLzma);

  if (res != SZ_OK) {
    // Free all allocated structures.
    LzmaDec_Free(&state, &SzAllocForLzma);
    return res;
  }

  char unsigned inBuf[IN_BUF_SIZE];
  char unsigned outBuf[OUT_BUF_SIZE];
  LzmaDec_Init(&state);

  ELzmaStatus status;
  long unsigned outLen = sizeof(outBuf);
  long unsigned inLen = sizeof(inBuf);
  long unsigned inPos = ftell(inFile);

  while (fgets(inBuf, sizeof(inBuf), inFile) != NULL) {
    inLen = MIN(sizeof(inBuf), MAX(ftell(inFile)-inPos, 0));
    outLen = sizeof(outBuf);

    SRes res = LzmaDec_DecodeToBuf(&state,
                                   outBuf,
                                   &outLen,
                                   inBuf,
                                   &inLen,
                                   LZMA_FINISH_ANY,
                                   &status);
// continues...
EN

回答 2

Stack Overflow用户

发布于 2013-02-23 15:09:02

这是一个相当古老的回复帖子,然而我遇到了同样的问题。

问题是,标题不应该是您正在解压缩的数据的一部分。解决方案是在读取数据时从sizeof(header)开始,而不是从开始,并且不要忘记也要通过sizeof(header)调整它的总长度。

票数 1
EN

Stack Overflow用户

发布于 2013-01-28 22:55:13

您确定输入不是7zArchive吗?这将需要调用SzArEx_Open和SzArEx_Extract。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9219693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档