目录
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); //a
printf("%c\n", ch);
ch = fgetc(pf); //b
printf("%c\n", ch);
//此时文件指针已定位在c的位置
fseek(pf, 2, SEEK_CUR);
ch = fgetc(pf); //e
printf("%c\n", ch);
fseek(pf,-2,SEEK_END);
ch = fgetc(pf); //f
printf("%c\n", ch);
fseek(pf, 6, SEEK_SET);
ch = fgetc(pf); //g
printf("%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;
}
输出结果为: