1、计算机为每个文件保留一个整数,这个整数表示下一次文件读写操作开始的位置(所以每次读取文件读到的是不一样的)
2、这个位置一定在两个相邻字节之间
3、这个整数的数值就是文件头到这个位置之间包含的字节个数
4、这个整数叫做文件的位置指针
5、每当从文件里读N个字节或文件里写入n个字节之后位置指针也会向后移动n个字节
6、fseek函数可以获得位置指针的数值
函数的参数是文件指针,返回值是位置整数
7、rewind函数可以把位置指针调整到位置开头
8、fseek函数可以把位置指针调整到文件任意位置
fseek函数里需要提供一个基准位置和目标位置到基准位置间的距离,计算机根据他们计算出目标位置
SEEK_SET 0 把文件头作为基准位置
SEEK_CUR 1 把当前位置作为基准位置
SEEK_END 2 把文件尾作为基准位置
9、如果目标位置在基准位置后面就用非负数作为距离
如果目标位置在基准位置后面就用负数作为距离
10、距离的绝对值就算是目标位置和基准位置之间包含的字节数
练习:
/*
* 文件位置指针移位
* 编写程序从person,,bin中获得所有人id显示在屏幕
* 只能获得id
* */
#include <stdio.h>
typedef struct {
int id;
float gz;
char name[10];
}person;
int main() {
int id = 0, size = 0;
FILE *p_file = fopen("person.bin", "rb");
if(p_file) {
while(1) {
size = fread(&id, sizeof(int), 1, p_file);
printf("id是:\n", id);
fseek(p_file, sizeof(person) - sizeof(int), SEEK_CUR);//,访问所有结构体里某一个成员,计算出需要移动的位置,
if(size = 0) {
break;
}
}
fclose(p_file);
p_file = NULL;
}
return 0;
}