目录
1. fseek
1.1 随机读文件
1.2 随机写文件
2. ftell
3. rewind
当以读方式打开一个存在且存有内容的文件时,文件指针会默认指向第一个元素。以在test4.txt文件中存储abcdef为例:
int main()
{//打开文件FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test4.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件int ch = fgetc(pf);printf("%c\n", ch);//关闭文件fclose(pf);pf = NULL;return 0;
}
此时会打印文件的第一个元素a:
为了实现文件的随机读写,介绍一下三个函数:
1. fseek
fseek函数根据文件指针的位置和偏移量来定位文件指针
1.1 随机读文件
int main()
{//打开文件FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test4.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读文件int ch = fgetc(pf); //aprintf("%c\n", ch);ch = fgetc(pf); //bprintf("%c\n", ch);//此时文件指针已定位在c的位置fseek(pf, 2, SEEK_CUR);ch = fgetc(pf); //eprintf("%c\n", ch);fseek(pf,-2,SEEK_END);ch = fgetc(pf); //fprintf("%c\n", ch);fseek(pf, 6, SEEK_SET);ch = fgetc(pf); //gprintf("%c\n", ch);//关闭文件fclose(pf);pf = NULL;return 0;
}
输出结果为:
1.2 随机写文件
int main()
{//打开文件FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");if (pf == NULL){perror("fopen");return 1;}//随机写文件fputc('a', pf);fputc('b', pf);fputc('c', pf);fputc('d', pf);fseek(pf, -3, SEEK_CUR);fputc('w', pf);//关闭文件fclose(pf);pf = NULL;return 0;
}
输出结果为:
注意只能修改不能插入;
2. ftell
返回文件指针相对于起始位置的偏移量
int main()
{//打开文件FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");if (pf == NULL){perror("fopen");return 1;}//随机写文件fputc('a', pf);fputc('b', pf);fputc('c', pf);fputc('d', pf);fseek(pf, -3, SEEK_CUR);fputc('w', pf);long pos = ftell(pf);printf("%ld\n", pos);//关闭文件fclose(pf);pf = NULL;return 0;
}
输出结果为:
3. rewind
让文件指针位置回到文件起始位置
int main()
{//打开文件FILE* pf = fopen("E:\\C_文件操作\\C_文件操作\\test5.txt", "w");if (pf == NULL){perror("fopen");return 1;}//随机写文件fputc('a', pf);fputc('b', pf);fputc('c', pf);fputc('d', pf);fseek(pf, -3, SEEK_CUR);fputc('w', pf);rewind(pf);long pos = ftell(pf);printf("%ld\n", pos);//关闭文件fclose(pf);pf = NULL;return 0;
}
输出结果为: