目录
函数介绍:
fseek:
原型:
参数说明:
int origin:
举例:
文件内容展示:
正常的使用fgetc函数:
结果:
使用了fseek之后:
SEEK_SET :从开始位置进行偏移指针
结果:
SEEK_END :从末端开始偏移指针
结果:
SEEK_CUR :从当前位置开始偏移
结果:
函数介绍:
fseek:
根据文件指针的位置和偏移量来定位文件指针,是一个读取函数。
原型:
int fseek ( FILE * stream, long int offset, int origin );
参数说明:
- FILE *stream:打开文件的文件指针
- long int offset:表示偏移量或者偏移值。
- int origin:开始偏移的位置。
在三个参数中,其实最重要的是 int origin 这个参数。
int origin:
开始偏移的位置,在这个函数中分为三种,分别是:
- 数据的起始位置 SEEK_SET
- 数据的末端位置 SEEK_END
- 当前文件指针所指向的位置:SEEK_CUR
其中当前所指向的位置,这个说法来自于http://t.csdn.cn/cEqD7中的fgetc的函数内涵
举例:
文件内容展示:
正常的使用fgetc函数:
int main()
{
int arr[10] = {0};
FILE* pf = fopen("data.txt","r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件,并设置变量接收读取的数据
int ch = fgetc(pf);
//打印读取的数据
printf("%c\n",ch);
fclose(pf);
pf = NULL;
return 0;
}
结果:
解读: 更具fgetc的特性,一次只能读取一个字符,所以当前读取的只能是字符a,并且当准备使用fgetc再次读取时,会读取下一个字符b,因为fgetc内部会设置一个指针专门用来读取字符的。
详情:http://t.csdn.cn/6iUhz
使用了fseek之后:
SEEK_SET :从开始位置进行偏移指针
int main()
{
int arr[10] = {0};
FILE* pf = fopen("data.txt","r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//进行读取偏移
fseek(pf,6,SEEK_SET);
//读文件,并设置变量接收读取的数据
int ch = fgetc(pf);
//打印读取的数据
printf("%c\n",ch);
fclose(pf);
pf = NULL;
return 0;
}
fseek(pf,6,SEEK_SET); 从文件数据开头的位置进行偏移,偏移了6个偏移值。
注意,偏移值是从0开始的,所以应该是七个位置,或者说偏移七个位置抵达偏移值是6的位置。
结果:
SEEK_END :从末端开始偏移指针
int main()
{
int arr[10] = {0};
FILE* pf = fopen("data.txt","r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//进行读取偏移
fseek(pf,-3,SEEK_END);
//读文件,并设置变量接收读取的数据
int ch = fgetc(pf);
//打印读取的数据
printf("%c\n",ch);
fclose(pf);
pf = NULL;
return 0;
}
fseek(pf,-3,SEEK_END); 从文件数据的未端进行偏移,偏移-3个位置,也就朝左变进行偏移,从左往右的负数偏移值是直接从-1开始。
结果:
SEEK_CUR :从当前位置开始偏移
int main()
{
int arr[10] = {0};
FILE* pf = fopen("data.txt","r");
if (pf == NULL)
{
perror("fopen");
return 1;
}
//读文件,并设置变量接收读取的数据
int ch = fgetc(pf);
//打印读取的数据
printf("%c\n",ch);
//进行读取偏移
fseek(pf,5,SEEK_CUR);
int ch = fgetc(pf);
printf("%c\n",ch);
fclose(pf);
pf = NULL;
return 0;
}
使用了fgetc的特性,将文件内部指针的位置进行更改,在使用fseek函数中的SEEK_CUR当前位置进行偏移,也就是当前位置的偏移值是0,往后在偏移6个位置,抵达偏移值5的位置。