嘉兴企业网站建设,文字生成网址,网站网站建设公司,山东世界500强企业文章目录 前言1. fseek1.1 fseek函数原型1.2 fseek函数的形式参数1.3 fseek实例演示 2. ftell2.1 ftell函数原型2.2 ftell函数的实例演示 3. rewind3.1 rewind函数原型3.2 rewind函数实例演示 前言
在之前#xff0c;我讲过文件的顺序读写。但是我们可不可以随机读写文件呢我讲过文件的顺序读写。但是我们可不可以随机读写文件呢答案是当然可以的只要我们合理的控制文件指针的位置光标就能够读取到我们想要读取的数据。
C语言给我们提供了随机读写文件的函数只要我们能够合理的运用它们就能够实现我们要达到的效果。
那么今天我们就来一起探讨一下随机文件读取函数
1. fseek
fseek函数的作用重新定位光标的位置。
一般来说我们打开一个文本文件文件的光标位置都会处在文件内容最开始的位置也就是如下的样子 那我们运用fseek函数就能够按照我们的意愿随意改变光标出现的位置然后在开始读取文件的内容。
1.1 fseek函数原型 如果fseek函数执行成功则返回0 。否则返回一个非0值。
1.2 fseek函数的形式参数
这里我要重点讲解一下fseek函数的形式参数。
形参名作用steam文件指针变量offset光标的偏移量origin设置光标的起始位置
看到offset这个变量名时不知道大家有没有想起我在结构体内存对齐的那边文章中用了一个offsetof函数检测了结构体成员相对于起始位置的偏移量。
而offset则是光标位置相对于设置光标起始位置之后的偏移量。
那对于origin变量,C编译器给我们提供了3个宏它们分别是
宏作用SEEK_SET将光标重置到文件开头的位置 (比较常用)SEEK_CUR将光标重置到当前文件内容的最末尾位置 (比较常用)SEEK_END将光标重置到文件结束标志的后面
1.3 fseek实例演示
//fseek函数的实例演示
//现在我有一个文件test4.txt内容为26个英文字母。现在我只想读取从字母m之后的所有字母并打印到屏幕上。
int main()
{char ch 0;int count 0;FILE* pf fopen(test4.txt,r);if (pf NULL){perror(fopen);return 1;}while (ch fgetc(pf)){if (ch m){break;}count;}fseek(pf,count,SEEK_SET);while ((ch fgetc(pf)) ! EOF){fprintf(stdout,%c,ch);}fclose(pf);pf NULL;return 0;
}2. ftell
ftell函数的作用告诉我们目前光标的位置从0开始。
2.1 ftell函数原型 ftell函数如果执行失败则返回-1 。
2.2 ftell函数的实例演示
int main()
{char ch 0;FILE* fp fopen(test4.txt,r);if (fp NULL){perror(fopen);return 1;}ch fgetc(fp);printf(%d\n, ftell(fp));ch fgetc(fp);printf(%d\n, ftell(fp));fclose(fp);fp NULL;return 0;}3. rewind
rewind函数的作用将光标中重置到文件最开头的位置也就是ftell读取值为0的地方。
3.1 rewind函数原型 3.2 rewind函数实例演示
//rewind函数
int main()
{char ch 0;FILE* fp fopen(test4.txt,r);if (fp NULL){perror(fopen);return 1;}ch fgetc(fp);printf(%c\n,ch);printf(%d\n, ftell(fp));rewind(fp);ch fgetc(fp);printf(%c\n, ch);printf(%d\n, ftell(fp));fclose(fp);fp NULL;return 0;
}