+ -
当前位置:首页 → 问答吧 → 请教,关于用C读二进制文件问题。

请教,关于用C读二进制文件问题。

时间:2010-08-23

来源:互联网

刚写的代码:int i,ch1,ch2,qu,wei,ret,sd;
                  FILE *fd;
1方法:
       fd = fopen(FILENAME,"rb"); //FILENAME为一二进制文件名
。。。。。
    i=52;
    i=((qu-161)*94+(wei-161))*8+i;
        ret = fseek(fd,i,SEEK_SET);
        ch1 = fgetc(fd);
        ch2 = fgetc(fd);

结果:ret始终为0,ch1,ch2 也始终为0;

2方法:
      sd = open(FILENAME,O_RDONLY);
...

    i=52;
    i=((qu-161)*94+(wei-161))*8+i;
        ret = lseek(sd,i,SEEK_SET);
        read(sd,&ch1,sizeof(ch1));
        read(sd,&ch2,sizeof(ch2));
结果:ret返回值正确,ch1,ch2始终为0;

不知道是否是读二进制文件要有什么特殊要求,否则怎么会总错。需要怎样读啊,求大师帮忙。

作者: robin254817   发布时间: 2010-08-23

你到底想实现什么功能啊?

作者: zhuqing_739   发布时间: 2010-08-23

上面fseek返回0是正确的,我本以为会跟lseek一样返回移动的字节数。
但是我始终不能将对应位置的数据放到我的变量ch1,ch2里,怎样才能做到呢?求解.

作者: robin254817   发布时间: 2010-08-23

回复 zhuqing_739


    我就想读二进制文件seek到的位置上的数据,然后存到我的变量ch1,ch2里,但是始终存不进去,怎么办?

作者: robin254817   发布时间: 2010-08-23

要确保你文件偏移的正确性哦,lseek函数是可以定位到文件实际长度之后的这样会产生一个空洞文件。

作者: davelv   发布时间: 2010-08-23

还有二进制读写一般都是用fread和fwrite,楼主干嘛用fgetc,这是对文本流操作嘛。

作者: davelv   发布时间: 2010-08-23

回复 davelv


    绝对没有seek出文件结尾,放心行了。二进制文件是否有空洞,因为文件不是我自己做的,所以不敢确定。不过这种可能性很少,那个二进制文件是矢量字库坐标文件,有空洞的话不是自找麻烦么。

作者: robin254817   发布时间: 2010-08-23

回复 davelv


    因为我最开始用fread不好使,才用fgetc试试,才知道同样不好使,杯具。。。

作者: robin254817   发布时间: 2010-08-23

fgetc读二进制文件?

作者: lenky0401   发布时间: 2010-08-23

注意“二进制文件”与“文本文件”的区别!!
6楼的说得很对啊!

作者: zhuqing_739   发布时间: 2010-08-23

你打开那个文件看看是不是内容就是0呢?

作者: lenovo   发布时间: 2010-08-23

这代码写的。。

作者: pengjianbokobe   发布时间: 2010-08-23