C语言中使用fseek,ftell函数获取文件记录总数?

long getLogcount(FILE *cfptr) {   // 获取文件记录总数 
    long begin, end, logcount;
    fseek(cfptr, 0L, SEEK_SET); // 定位指针到文件开始位置
    begin = ftell(cfptr);
    fseek(cfptr, size, SEEK_END); // size为一条记录的大小
    end = ftell(cfptr);
    logcount = (end - begin) / size - 1;
    return logcount;
}

这里指针到底移动到哪里了,被搞蒙了
fseek(cfptr, 0L, SEEK_SET);是第1条数据的位置?
fseek(cfptr, size, SEEK_END);从最后再移动一条记录?
最后怎么又(end - begin) / size - 1还需要减1?

问下大神指针到底移动到哪里了。

阅读 2.4k
2 个回答

因为fseek可以超越文件结尾,所以这么写是可以的,只是有点奇怪为什么要这么写?这是哪里的代码?

假设文件长度为 x,由

begin = 0
end = x + size

那么

(end - begin)/size - 1
= (x + size)/size - 1
= x/size
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题