首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是什么原因导致libbzip2 readOpen函数出现unexpected_EOF错误?

是什么原因导致libbzip2 readOpen函数出现unexpected_EOF错误?
EN

Stack Overflow用户
提问于 2020-08-06 11:36:03
回答 1查看 43关注 0票数 0

我正在使用libbzip2指令进行bzip2编程,以创建一个用于压缩/解压缩的脚本,但是我在读取步骤中遇到了问题。下面是我的代码:

代码语言:javascript
复制
int decode = (argv[4][0]=='d');
 FILE* f = fopen( argv[2], "rb" ); if( f==0 ) return 2;
 FILE* g = fopen( argv[3], "wb" ); if( g==0 ) return 2;
 int bzError;
 int nBuf;
 int f_len = flen(f);
 byte* inp = new byte[f_len*4+1024*1024];   if( inp==0 ) return 3;

 
 f_len = fread( inp, 1,f_len, f );
 
 if( decode==0 ) {
   int BLOCK_MULTIPLIER = atoi( argv[5] );
   BZFILE *myBZ = BZ2_bzWriteOpen(&bzError, g, BLOCK_MULTIPLIER, 0, 0);
   BZ2_bzWrite(&bzError, myBZ, inp, f_len);
   BZ2_bzWriteClose(&bzError, myBZ, 0, NULL, NULL);
   
  } else {
   byte buf[4096];
   
   BZFILE *myBZ = BZ2_bzReadOpen(&bzError, f, 0, 0, NULL, 0);
   if (bzError != BZ_OK) {
      fprintf(stderr, "E: BZ2_bzReadOpen: %d\n", bzError);
      return -1;
   }

   while (bzError == BZ_OK) {
      int nread = BZ2_bzRead(&bzError, myBZ, buf, sizeof buf);
      cout<<"nread= "<<nread<<"\n";
      if (bzError == BZ_OK || bzError == BZ_STREAM_END) {
         size_t nwritten = fwrite(buf, 1, nread, stdout);
         if (nwritten != (size_t) nread) {
            fprintf(stderr, "E: short write\n");
            return -1;
  }
}

}

代码语言:javascript
复制
   if (bzError != BZ_STREAM_END) {
      fprintf(stderr, "E: bzip error after read: %d\n", bzError);
      return -1;

}

代码语言:javascript
复制
   BZ2_bzReadClose(&bzError, myBZ);
   return 0;

}

压缩模式运行良好,但如果处于解压缩模式,bzRead步骤将失败,并且我将从错误消息/语句中获得以下输出:

nread =0 E:读取后发生bzip错误:-7

为什么nread会是0?此外,-7表示意外的EOF,但这怎么可能呢?我也尝试过在用内置linux bzip2压缩的文件上运行它,并得到了相同的输出。

EN

回答 1

Stack Overflow用户

发布于 2020-08-06 12:47:49

在决定是否解码之前,看起来您正在读取整个输入文件。如果是,那么即使已经到达文件末尾,也要尝试继续读取相同的输入文件。所以你什么也得不到。

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

https://stackoverflow.com/questions/63276488

复制
相关文章

相似问题

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