目录
- 一.文件的随机读写
- 1.fseek
- 2.ftell
- 3.rewind
- 二.文件读写结束的判定
- 1.feof函数(不是用来判定文件结束的)
- 2.ferror函数
- 三.文件缓冲区
一.文件的随机读写
1.fseek
int fseek(FILE* stream,long int offset,int origin);
//第一个参数文件流
//第二个参数偏移量
//偏移量如果是正数,向后偏移
//偏移量如果是负数,向前偏移
//第三个参数起始位置
fseek从当前光标指向的流中获取字符
SEEK_SET:文件的起始位置
SEEK_CUR:文件指针当前位置
SEEK_END:文件的结束位置
int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读char ch = fgetc(pf);printf("%c\n", ch);//afseek(pf, 4, SEEK_SET);//距文件起始位置4个偏移量printf("%c\n", fgetc(pf));//e//fseek(pf,5,SEEK_CUR);//距当前文件位置5个偏移量//printf("%c\n", fgetc(pf));//g//fseek(pf,-6,SEEK_END);//距文件末尾位置6个偏移量//printf("%c\n",fgetc(pf));//dfclose(pf);pf = NULL;return 0;
}
这是test.txt中的字符串
2.ftell
返回文件指针相对于起始位置的偏移量
long int ftell(FILE* stream);
int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读char ch = fgetc(pf);printf("%c\n", ch);//aint ret = ftell(pf);printf("%d\n", ret);//1fclose(pf);pf = NULL;return 0;
}
3.rewind
让文件指针的位置回到文件的起始位置
void rewind(FILE* stream);
int main()
{FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}//读char ch = fgetc(pf);printf("%c\n", ch);//aint ret = ftell(pf);printf("%d\n", ret);//1rewind(pf);//文件指针回到起始位置printf("%c\n",fgetc(pf));//a//打印a说明文件回到了起始位置fclose(pf);pf = NULL;return 0;
}
二.文件读写结束的判定
文件现在读取结束了,但是是什么原因读取结束的呢?
1.可能是遇到了文件末尾
2.可能是读取的时候发生了错误
1.feof函数(不是用来判定文件结束的)
文件已经结束,用来判定文件结束的原因
feof的作用是:文件读取结束的时候,判断文件是否遇到文件末而结束的
feof没有读到文件末尾返回0,读到文件末尾返回非0值
int feof(FILE* stream)
//feof函数只需要关注传入的文件指针是否为NULL即可
2.ferror函数
文件已经结束,ferror读取的时候没有发生错误返回0,发生错误返回非0值
int ferror(FILE* stream)
//ferror函数只需要关注传入的文件指针是否为NULL即可
下面来举一个例子:
int main()
{FILE* pf = fopen("test.txt", "r");//打开文件if (pf == NULL){perror("fopen");//打印错误return 1;//发生错误提前返回}//使用char ch = 0;while ((ch = fgetc(pf)) != EOF){printf("%c ", ch);}printf("\n");if (feof(pf))//返回非0值{printf("读到文件末尾而结束\n");}else if(ferror(pf))//返回非0值{printf("读取错误而结束\n");perror("ferror");}fclose(pf);//关闭文件pf = NULL;return 0;
}