C语言rewind()和fseek()随机读写文件的用法(附带实例)
在 C 语言程序中,通常文件读写方式都是先打开文件,然后从文件的开头开始读写。
如果想要读写文件中间或者文件后面的数据,从文件开头开始读写不但浪费内存,而且效率很低。因此,下面运用 rewind() 和 fseek() 函数对文件进行随机读写操作。
rewind() 函数的作用是使文件指针指向文件开头。其语法如下:
fseek() 函数的作用是使文件指针指向任意位置,fseek()函数的语法如下:
起始位置可以是文件开头位置,可以是文件当前位置,也可以是文件结尾位置。C语言中对这 3 个位置的命名和代表符号如下表所示。
下面举几个例子说明 fseek() 函数的用法,代码如下:
【实例】导出排名第二的学生的信息,并显示出来。代码如下:
编译运行程序,结果如下:
如果想要读写文件中间或者文件后面的数据,从文件开头开始读写不但浪费内存,而且效率很低。因此,下面运用 rewind() 和 fseek() 函数对文件进行随机读写操作。
rewind() 函数的作用是使文件指针指向文件开头。其语法如下:
rewind(fp); //fp为文件指针
fseek() 函数的作用是使文件指针指向任意位置,fseek()函数的语法如下:
fseek(文件指针,位移的字节数,起始位置);位移的字节数可以是正数,也可以是负数,正数表示向前移动,负数表示向后移动。
起始位置可以是文件开头位置,可以是文件当前位置,也可以是文件结尾位置。C语言中对这 3 个位置的命名和代表符号如下表所示。
| 起始位置 | 位置命名 | 代表符号 |
|---|---|---|
| 文件开头位置 | SEEK_SET | 0 |
| 文件当前位置 | SEEK_CUR | 1 |
| 文件结尾位置 | SEEK_END | 2 |
下面举几个例子说明 fseek() 函数的用法,代码如下:
fseek(fp,10,0); //将文件指针向前移到离文件开头位置10个字节处 fseek(fp,10,1); //将文件指针向前移到离文件当前位置10个字节处 fseek(fp,-20,1); //将文件指针向后移到离文件当前位置20个字节处 fseek(fp,-50,2); //将文件指针向后移到离文件结尾位置50个字节处注意,fseek() 函数一般用于二进制文件,在文本文件中使用容易出错,因为文本文件需要进行字符转换,在计算字节数时不一定跟预想的一样。
【实例】导出排名第二的学生的信息,并显示出来。代码如下:
#include <stdio.h>
#include <stdlib.h>
#define FILESTR "E:\c.dat" //定义文件路径
#define STU_NUM 2
struct stu{
char name[10]; //学生名称
int num; //学生学号
float Chinese,math,English;
};
int main()
{
FILE *fp;
struct stu stu_a;
int i;
if((fp=fopen(FILESTR,"rb+"))==NULL)
{
printf("error: cannot open file!\n");
exit(0);
} //用二进制读写形式创建文件
//将位置指针移动到第二个学生的信息开头处
fseek(fp,sizeof(struct stu),0);
fread(&stu_a,sizeof(struct stu),1,fp); //读取一条学生信息
printf("%s %d %d %d %d",stu_a.name,stu_a.num,
stu_a.Chinese,stu_a.math,stu_a.English);
printf("\n");
fclose(fp);
return 0;
}
E:\c.dat文件中存储的学生信息如下:
Liao 1 97 86 86
Tang 2 86 96 86
编译运行程序,结果如下:
Tang 2 86 96 86
ICP备案:
公安联网备案: