在文件的读写过程中,操作系统为每一个打开的文件设置了一个位置指针,指向当前读写数据的位置,每次读写一个字节后,该指针向后移动一个位置。它是一个无符号的长整数数据。用来表示当前读写的位置,在c语言中,文件读写的方式分为顺序读写和随机读写两种。顺序读写按字节顺序移动,随机移动按需要移动
下面介绍几个操作文件内部位置指针的函数rewind(文件指针)
本函数可以重置文件位置指针到文件开头
下面将实现一个例子,首先读取文件1的内容,然后把他复制给文件2
#include<stdio.h>
#pragma warning (disable:4996)
int main()
{
FILE* fp;
FILE* fp1;
fp = fopen("E:\\1.txt", "r");
fp1 = fopen("E:\\kkk.txt", "w");
while (!feof(fp))
{
putchar(fgetc(fp));
}
rewind(fp);
while (!feof(fp))
{
fputc(fgetc(fp), fp1);
}
fclose(fp);
fclose(fp1);
}
C++首先判断文件指针位置是否结束,没有结束则循环读和打印文件1中的字符,这时候循环外文件1的文件位置指针处于结束位置,通过rewind重置指针到开头,然后再将读到的字符写到文件2中即可ftell(文件指针)
返回文件位置指针的当前位置(相对于文件开头的偏移量)
fseek(文件指针,位移量,起始位置)
功能是改变文件位置指针的位置。位移量是指移动字节数,大于0表明往后移动,小于0表示往前移动,起始位置是指从何处开始移动
起始点 | 表示符号 | 数字表示 |
---|---|---|
文件开始处 | SEEK_SET | 0 |
当前位置 | SEEK_CUR | 1 |
文件末尾处 | SEEK_END | 2 |
例如 | ||
fseek(fp,30,0) 从文件开始位置向文件结束方向移动30个字节 |
文件操作中的检错检测
ferror(文件指针)
测试文件是否出现错误
调用结束,如果未出现错误,return 0,出错则是非0
在调用文件输入输出函数时,均产生ferror值,可以用来测试。fopen时,ferror值置0clearerr
清楚错误表示,即ferror置0
出错后,错误标志一直保留,知道对同一文件调用clearerr、rewind或者任何输入输出函数时,错误标志才会被清除。feof
判断文件是否处于结束位置。是则返回1,否则为0