C 语言中控制文件的读取或写入光标

打印 上一主题 下一主题

主题 882|帖子 882|积分 2646

在 C 语言中,文件操作时控制文件的读取/写入光标或位置,可以通过一些尺度函数来实现。文件操作中控制光标的函数主要有 fseek(), ftell(), 和 rewind()。这些函数可以帮助你控制文件中数据的读写位置。
1. fseek() 函数

fseek() 函数用于设置文件指针的位置。它允许你在文件中的恣意位置举行读写操作。
  1. int fseek(FILE *stream, long int offset, int whence);
复制代码


  • stream:指向文件的指针。
  • offset:距离 whence 位置的偏移量,单位是字节。
  • whence:指定偏移的起始位置,常用的值有:

    • SEEK_SET:文件开头(偏移量 offset 从文件开头盘算)。
    • SEEK_CUR:当前位置(偏移量 offset 从当前文件指针位置盘算)。
    • SEEK_END:文件结尾(偏移量 offset 从文件结尾盘算)。

返回值:返回 0 表现乐成,返回 -1 表现失败。
示例:fseek() 使用

  1. #include <stdio.h>
  2. int main() {
  3.     FILE *file = fopen("example.txt", "r+");  // 打开文件进行读写
  4.     if (file == NULL) {
  5.         printf("Error opening file.\n");
  6.         return 1;
  7.     }
  8.     // 将文件指针移动到文件的第10个字节处
  9.     fseek(file, 10, SEEK_SET);
  10.    
  11.     char ch = fgetc(file);
  12.     printf("Character at position 10: %c\n", ch);
  13.     fclose(file);
  14.     return 0;
  15. }
复制代码
表明


  • fseek(file, 10, SEEK_SET) 将文件指针移动到文件的第 10 个字节处。
  • 然后通过 fgetc() 读取该位置的字符。
2. ftell() 函数

ftell() 函数用于返回当前文件指针的位置,即文件中当前读取或写入位置的字节偏移量。
  1. long ftell(FILE *stream);
复制代码


  • stream:指向文件的指针。
返回值:返回当前文件指针的位置(以字节为单位)。如果堕落,返回 -1。
示例:ftell() 使用

  1. #include <stdio.h>
  2. int main() {
  3.     FILE *file = fopen("example.txt", "r");  // 以只读模式打开文件
  4.     if (file == NULL) {
  5.         printf("Error opening file.\n");
  6.         return 1;
  7.     }
  8.     // 读取前 5 个字符
  9.     char buffer[6];
  10.     fread(buffer, sizeof(char), 5, file);
  11.     buffer[5] = '\0';  // 添加字符串结束符
  12.     printf("Buffer content: %s\n", buffer);
  13.     // 获取当前文件指针的位置
  14.     long pos = ftell(file);
  15.     printf("Current file pointer position: %ld\n", pos);
  16.     fclose(file);
  17.     return 0;
  18. }
复制代码
输出
  1. Buffer content: Hello
  2. Current file pointer position: 5
复制代码
表明


  • ftell(file) 返回当前文件指针的位置。假设文件最初的指针位置在文件的开头,读取 5 个字符后,文件指针会移动到第 6 个字节位置,因此 ftell() 返回 5。
3. rewind() 函数

rewind() 函数将文件指针移动到文件的开头,并清除文件的错误标记。
  1. void rewind(FILE *stream);
复制代码


  • stream:指向文件的指针。
返回值:此函数无返回值,操作乐成或失败由 ferror() 来检测。
示例:rewind() 使用

  1. #include <stdio.h>
  2. int main() {
  3.     FILE *file = fopen("example.txt", "r");  // 以只读模式打开文件
  4.     if (file == NULL) {
  5.         printf("Error opening file.\n");
  6.         return 1;
  7.     }
  8.     // 读取前 5 个字符
  9.     char buffer[6];
  10.     fread(buffer, sizeof(char), 5, file);
  11.     buffer[5] = '\0';  // 添加字符串结束符
  12.     printf("Buffer content: %s\n", buffer);
  13.     // 将文件指针移动到文件开头
  14.     rewind(file);
  15.     // 重新读取文件的第一个字符
  16.     char ch = fgetc(file);
  17.     printf("First character after rewind: %c\n", ch);
  18.     fclose(file);
  19.     return 0;
  20. }
复制代码
输出
  1. Buffer content: Hello
  2. First character after rewind: H
复制代码
表明


  • 在调用 rewind(file) 后,文件指针被重新设置到文件的开头。
  • 然后,我们通过 fgetc() 读取文件的第一个字符。
4. 常见用法总结



  • fseek():将文件指针移动到文件中的恣意位置。可以使用偏移量来指定移动的距离。
  • ftell():返回当前文件指针的位置。常用于记录文件指针的当前位置,以便稍后返回。
  • rewind():将文件指针移动到文件的开头,并清除文件的错误标记。实用于在文件读取完成后必要重读的环境。
5. 相干错误处置惩罚

文件操作中的常见错误处置惩罚包括:


  • 使用 ferror() 查抄文件操作中是否发生错误。
  • 使用 feof() 查抄是否到达文件的末端。
  1. int ferror(FILE *stream);  // 检查文件操作错误
  2. int feof(FILE *stream);    // 检查是否到达文件末尾
复制代码
总结



  • fseek()ftell()rewind() 是 C 语言中文件操作中非常有效的函数,用来控制和获取文件指针的位置。
  • 使用这些函数可以精确地控制读取和写入的文件位置,尤其是在处置惩罚大文件或必要多次遍历文件的环境下。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

金牌会员
这个人很懒什么都没写!

标签云

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