LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2044|回复: 3

请教fseek的用法

[复制链接]
发表于 2004-2-28 19:19:34 | 显示全部楼层 |阅读模式
定位成功的话会返回0,如果不成功呢?比如定位的位置超过了文件的长度时是不是也是返回0啊?看下面的程序:
while(!(fseek(fp,offset,SEEK_SET)))
        {
                fgets(line,80,fp);
                printf("%s",line);
                offset+=80;
        }
我想通过定位来顺序读完文件,可最后一行(字数不足80)一直循环输出个不停.怎么 解决呢?
发表于 2004-2-28 19:50:05 | 显示全部楼层
顺序读文件一般用不到fseek,直接fgets就可以了,

  1. while(fgets(line, 80, fp))
  2.   fputs(line, stdout);
复制代码

如果你非要用的话可以这样

  1. while(fgets(line, 80, fp)){
  2.   printf("%s", line);
  3.   offset += 80;
  4.   if(fseek(fp, offset, SEEK_SET))
  5.     break;
  6. }
复制代码

不过还是有问题,你怎么知道每次读入的都是80个字符呢?除非你确定文件中间没有换行
而且文件指针本身就记录了文件的当前读写位置,用offset再记录一下感觉就是多余,也容易出错,fseek本身是为了随机读写准备的,顺序读写的时候还是不用的好
 楼主| 发表于 2004-2-29 14:01:38 | 显示全部楼层
谢谢!其实我想实现的并不是从当前文件指针处顺序读下去,而是往回回溯一定数量的字符处再往下读,只好想到了fseek。另外,你提到换行,我不太了解,是不是换行后定位操作也会中断?
发表于 2004-2-29 21:59:11 | 显示全部楼层
fgets读到换行符或指定的字符数就会返回,象你上面的程序,如果中间有换行的话fgets就读不到80个字符,这时候用offset += 80;的话,中间就有一些数据没有读到。
fgets一般都是用来顺序读文件的,不和fseek配合使用,和fseek配合的一般是用于随机读写的fread、fwrite之类的,fgetc之类的函数两种情况下都可以用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表