int fseek ( FILE * stream, long int offset, int origin );
根据文件指针的位置和偏移量来定位文件指针.(重新定位流位置指示器)
stream:指向标识流的文件对象的指针
offset:二进制文件:从原点偏移的字节数。
文本文件:零或ftell返回的值。
(向前偏移则是负数,向后偏移是正数)
origin:用作偏移量参考的位置。
它由< cstdio >中定义的下列常量之一指定,专门用作此函数的参数:
SEEK_SET | 文件开头 |
---|---|
SEEK_CUR | 文件指针的当前位置 |
SEEK_END | 文件结尾 |
返回值:如果成功,该函数返回零。
否则,它返回非零值。
如果发生读或写错误,则设置错误指示器(ferror)
ftell:long int ftell ( FILE * stream );
返回流的位置指示器的当前值。
即返回当前文件指针距头部的偏移量
返回值:如果成功,则返回位置指示器的当前值。
失败时,返回-1L,errno设置为特定于系统的正值
rewind:void rewind ( FILE * stream );
将流的位置设置到开头
实际例子:int main()
{
//fseek
FILE* pf = fopen("test.txt", "r"); //abcde
if (pf == NULL)
{
perror("fopen");
return 1;
}
int ret = fgetc(pf); //文件指针一开始指向文件头部,输出a后向后移了一个字节
printf("%c\n", ret); //a
fseek(pf, 2, SEEK_CUR); //将文件指针在当前位置向后偏移两个字节
ret = fgetc(pf);
printf("%c\n", ret); //d
fseek(pf, -3, SEEK_END); //将文件指针从文件尾开始向前偏移3个字节
ret = fgetc(pf);
printf("%c\n", ret); //c
fseek(pf, 1, SEEK_SET); //将文件指针从文件头开始向后偏移1个字节
ret = fgetc(pf);
printf("%c\n", ret); //b
//尝试将文件指针移出字符串
printf("%d\n", fseek(pf, 2, SEEK_END)); //0 将文件指针从文件尾开始向后偏移2个字节,输出0,说明移动成功了
printf("%d\n", ftell(pf)); //7 此时文件指针已经指向字符串结尾的后两个字节处,相对于头部位置偏移量为7
printf("%d\n", fseek(pf, -2, SEEK_SET));//-1 将文件指针从文件头开始向前偏移2个字节,输出-1,说明移动失败了
printf("%d\n",ftell(pf)); //7 上一步移动失败,所以文件指针距头部偏移量没有变
rewind(pf); //将文件指针调到开头
printf("%d", ftell(pf)); //0
free(pf);
pf = NULL;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)