返回介绍

9.3.2 文件游标的获取

发布于 2025-04-11 22:33:05 字数 1777 浏览 0 评论 0 收藏 0

可以通过 C 标准库中的 ftell 函数获取当前文件游标的位置,函数原型如下:

long ftell(FILE *stream);

ftell 函数只有一个参数 stream,为所打开文件相关联的文件流,函数返回值为当前文件游标的位置,如果函数执行出错,则返回值为–1。

如果在打开文件后就立即调用 ftell 函数,此时所返回的文件游标位置应该为 0。例如:

编译运行程序,结果如下:

The current file location is: 0

若在调用 ftell 函数之前,先通过 fgetc 函数读取一个字符,再来看一下当前文件游标位置。例如:

此时,再编译运行程序,结果如下:

The current file location is: 1

可见,在读取一个字符后,文件游标从 0 变为了 1。

文件位置像内存地址一样,是按字节编号的,因此,可以通过 fseek 函数将文件游标设置到文件尾,再通过 ftell 函数来获取当前文件游标位置,即可获知文件的大小。例如:

编译运行程序,结果如下:

File size is: 12 Bytes.

ftell 函数的返回值是 long 类型,即一个 4 字节 32 位的数据类型,能够表示的数值范围为–2147483648~2147483647。也就是 ftell 函数最多能正确返回小于 2GB 的文件大小,对于更大的文件就无能为力了。那大文件怎么办呢?

C 标准库中,还提供了 fsetpos 函数和 fgetpos 函数来对大文件的文件游标进行设置和获取。这两个函数的原型如下:

int fsetpos(FILE *stream, const fpos_t *position);
int fgetpos(FILE *stream, fpos_t *position);

两个函数都使用了 fpos_t 类型的指针作为函数的参数,通过 sizeof 运算符对 fpos_t 类型进行检测,可以发现 fpos_t 类型的大小为 8 字节,因此,它能够应付更大型的文件。函数若执行成功返回 0,若执行失败则返回非零值。

下面用一段程序代码,来演示这两个函数的使用。例如:

编译运行程序,结果如下:

The character is: s
The current file location is: 6

从结果可见,通过将文件游标的位置设置为 5,读取到的字符为小写字母 s,而在读取字符之后,文件游标的位置已经自动偏移至 6 了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。