目录
1. feof / ferror
feof () 函数判断 : int feof(FILE *stream);
功能:判断当前参数stream的文件流指针是否到达文件结尾,如果到达文件结尾则返回真,否则返回假
注意:该操作一定要在一次IO操作之后判断。
参数:stream 要判断结尾的文件流对象
返回值:成功到达结尾是 真 , 否则 是假
ferror : 检测一个流是否出错
if (feof(fp)) {
printf("到达文件末尾!\n");
} else {
printf("未到达文件末尾!\n");
}
if (ferror(fp)) {
printf("出错!\n");
clearerr(fp);
} else {
printf("未出错!\n");
}
2. fseek
int fseek(FILE *stream, long offset, int whence);
功能:将stream流文件中的文件指针从whence位置开始,偏移offset字节的长度。
参数:stream 要移动文件指针的目标文件流对象。
注意:不支持设备文件,一般用于普通文件。
offset 要在文件内偏移的距离,单位字节。
如果值为整数,则向文件末尾偏移
如果值为负数,则向文件开头偏移
whence 偏移的起始位置,由系统定义的三个宏开始。
SEEK_SET 文件的开头位置
SEEK_CUR 文件的当前位置
SEEK_END 文件的末尾位置
返回值:
成功: 返回 0
失败: -1;
如果从文件的指定位置向后偏移过程中已经超过了文件的当前末尾位置,则会自动以'\0'来填充文件内容,从而形成一种被称为"空洞文件" 的特殊文件。
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE* fp = fopen("./01fopen.c","r");
if(NULL == fp)
{
printf("fopen error\n");
return 1;
}
int ret = fseek(fp,10,SEEK_SET);
if(-1 == ret)
{
printf("fseek error\n");
return 1;
}
char buf[512]={0};
fgets(buf,sizeof(buf),fp);
printf("buf is %s\n",buf);
fclose(fp);
return 0;
}
3. ftell
long ftell(FILE *stream);rewind(fp);
功能:获取当前文件流指针的具体位置,一般以文件开头到当前指针的字节数为返回值。
参数:stream 要返回指针距离的文件流对象
返回值:成功 获取到的距离长度,单位是字节;失败 -1;
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE* fp = fopen("./2.png","r");
if(NULL == fp)
{
r