c语言fseek函数的用法(附带实例)
fseek() 函数的作用是移动文件内部的位置指针。其一般形式如下:
例如,下面的语句表示将位置指针从当前位置向后退 20 个字节:
文件的随机读写在移动位置指针之后进行,即可用前面介绍的任一种读写函数进行读写。
【实例】快递员送快递。快递员通常会将收货人电话的后 4 位写到快递包裹上,作为取货号使用。编写程序,例如收货人电话是 123****8900,则输出取货号 8900。运行程序前,需要在 E 盘设置 goods.txt 文件,内容是收货人的手机号。代码如下:
fseek(文件类型指针,位移量,起始点);
- “文件类型指针”指向被移动的文件;
- “位移量”表示移动的字节数,一般为 long 型数据,以保证文件长度大于 64KB 时不会出错;
- “起始点”表示从何处开始计算位移量,一般是文件首、文件当前位置和文件尾,其表示方法如下表所示。
起始点 | 表示符号 | 数字表示 |
---|---|---|
文件首 | SEEK_SET | 0 |
文件当前位置 | SEEK_CUR | 1 |
文件尾 | SEEK_END | 2 |
例如,下面的语句表示将位置指针从当前位置向后退 20 个字节:
fseek(fp,-20L,1);注意,fseek() 函数一般用于二进制文件。在文本文件中使用时,由于要进行转换,计算的位置会出现错误。
文件的随机读写在移动位置指针之后进行,即可用前面介绍的任一种读写函数进行读写。
【实例】快递员送快递。快递员通常会将收货人电话的后 4 位写到快递包裹上,作为取货号使用。编写程序,例如收货人电话是 123****8900,则输出取货号 8900。运行程序前,需要在 E 盘设置 goods.txt 文件,内容是收货人的手机号。代码如下:
#include<stdio.h> #include<process.h> int main() { FILE *fp; char filename[30], str[50]; /* 定义两个字符型数组 */ printf("请输入文件路径:\n"); scanf("%s", filename); /* 输入文件名 */ if((fp = fopen(filename, "wb")) == NULL) /* 判断文件是否打开失败 */ { printf("不能打开文件!\n 请按任意键继续\n"); getchar(); exit(0); } printf("请输入字符串:\n"); getchar(); gets(str); fputs(str, fp); fclose(fp); if((fp = fopen(filename, "rb")) == NULL) /* 判断文件是否打开失败 */ { printf("不能打开文件!\n 请按任意键继续\n"); getchar(); exit(0); } fseek(fp, 7L, 0); fgets(str, sizeof(str), fp); printf("\n取货号为:\n"); puts(str); fclose(fp); return 0; }程序运行结果为:
请输入文件路径:
E:/demo.txt
请输入字符串:
123****8900
取货号为:
8900
fseek(fp,5L,0);