目录
8. 文件的随机读写
8.1 fseek
8.2 ftell
8.3 rewind
9. 文件结束判定
10. perror
8. 文件的随机读写
假设文件中存放的是abcdef,如下图,通常在读文件时,是先读取首元素地址,也就是文件指针指向a,每读一次文件指针向后++;
本节内容将去实现:如何再读文件时,一开始读到的就不是首元素,而可能是c d e 等等。
8.1 fseek
想要实现文件随机读写的功能;首先打开文件,就需要定位到文件指针;
fseek:根据文件指针的位置和偏移量来定位文件指针。
函数原型:int fseek(FILE* stream,long int offset,int origin);
头文件:stdio.h
参数:第一个参数文件指针pf;第二个参数偏移量;第三个参数是起始位置,也可以说是文件指针的当前位置;
对于参数三:C语言给出了3个选择
1. 当前位置,也就是文件指针目前指向的位置;SEEK_CUR---文件指针的当前位置
2. 以文件的末尾为起始位置进行偏移,所以的偏移量都是负数;SEEK_END---文件的末尾位置
3. 以文件的起始位置为初始点进行偏移,所有的偏移量都是正数;SEEK_SET---文件的起始位置
第三个参数设置为SEEK_END,以结尾位置作为当前位置进行偏移;第二个参数设置为-2;
8.2 ftell
ftell函数:会返回文件指针相对于起始位置的偏移量;
函数原型:long int ftell(FILE* stream);返回类型长整型long int;
如果没有通过fseek定位文件指针,那么默认的文件指针指向起始位置;那么文件指针相对于起始位置的偏移量就是0;
如果首先fgetc(pf)读取一个字符,那么fgetc默认会从文件的起始位置进行读取,fgetc以后,文件指针会指向第一个元素的地址;此时用ftell函数返回文件指针相对于起始位置的偏移量就是1;
8.3 rewind
rewind函数:让文件指针的位置回到起始位置;
函数原型:void rewind(FILE* stream);
9. 文件结束判定
被错误使用的 feof 文件结尾处EOF作为结束标志存放
切记:在文件读取过程中,能用feof函数的返回值直接用来判断文件是否结束,该函数是用来判断当文件读取结束的时候,是读取失败结束,还是遇到文件结尾结束;
1. 文本文件读取是否结束,判断返回值是否为EOF(fgetc),或者NULL(fgets);EOF---end of file(文件结束标志)
2. 二进制文件的读取结束判断,判断fread返回值是否小于实际要读的个数;
EOF的定义,返回值为-1;当我们的文件是空的,此时读取文件,EOF的返回值就是-1;
10. perror
strerror(errno)函数会把错误信息对应的错误码返回;
perror函数会将函数内设定的参数打印出来;并且默认打印冒号+空格;在 设定内容+冒号+空格 后面会打印错误信息的错误码 ,并且该函数不需要引用头文件;相对于strerror函数,perror函数使用起来更加简单方便。