10.2.2 文件的读写与定位
1.文件的读写操作
(1)以字符方式读写文件。
以下函数是以字符为单位进行文件读写的,此类函数主要用于对由字符组成的文本文件进行读写操作。
①int fputc(int ch,FILE*fp)
写字符函数。该函数的功能是将字符ch写入文件指针fp所指的文件中去。若写入成功,则返回值是字符ch;若写入失败,则返回EOF(值为-1)。
②int fgetc(FILE*fp)
读字符函数。该函数功能是从文件指针fp所指文件读取一个字符,并返回该字符。若读取失败,则返回EOF(值为-1)。
③int feof(FILE*fp)
该函数的功能是检查文件是否结束。若文件指针指向文件末尾,则函数返回值为1;否则,函数返回值为0。
例10.1 将一个文本文件的内容复制到另一个文本文件中。程序如下:
程序运行结果如下:
程序运行结果是将file1.c文件中的内容复制到file2.c中去。可以用下面DOS命令验证:
(2)以字符串方式读写文件。
以字符串为单位进行文件读写的函数主要有以下两个:
①int fputs(char*string,FILE *fp)
写字符串函数。该函数功能是将字符串string写入文件指针fp所指文件中去,字符串结束符'\0'不写入。若写入成功,则返回值为0;否则,返回EOF。
②char fgets(char*string,int n,FILE *fp)
读字符串函数。该函数的功能是从文件指针fp所指文件中,读取字符到字符串string中,只读取n-1个字符,再在末尾加一个结束符'\0',这样字符串string就是n个字符。若在读完n-1个字符之前遇到换行符或EOF,读取被结束。函数返回值为string的首地址。
例10.2 将例10.1用字符串函数编程。
程序如下:
程序运行结果如下:
程序运行结果是将filel.c文件中的内容复制到file2.c中去。
例10.3 向文本文件写入一个字符串。
程序如下:
程序运行结果如下:
程序运行结果是将字符串“welcome to c”写入到文件text.c中去。可以用下面的DOS命令验证
(3)格式化读写文件。
格式化读写函数主要有以下两个:
①int fprintf(FILE*fp,char *format)
格式化输出函数。该函数的功能是按照format规定的格式把数据写入文件指针fp所指的文件中去。其中format参数的含义与printf相同,此函数与printf函数类似。
②int fscanf(FILE*fp,char *format)
格式化输入函数。该函数的功能是按照format规定的格式从文件指针fp所指的文件中读取数据。其用法与scanf函数类似。
例10.4 文件格式化输入输出的实例。
程序如下:
程序运行结果如下:
程序运行结果是将3个学生的基本信息(包括姓名,学号,成绩)写入到文件student.txt中去。可以用下面DOS命令验证:
(4)二进制文件的读写。
二进制文件读写函数主要有以下两个:
①unsigned fwrite(void*ptr,unsigned size,unsigned n,FILE *fp)
二进制输出函数。该函数的功能是将指针ptr所指的内存区域中的数据写入文件指针fp所指的文件中去,这些数据共n项,每项size个字节。
②unsigned fread(void*ptr,unsigned size,unsigned n,FILE *fp)
二进制输入函数。该函数的功能是从文件指针fp所指的文件中读取数据,存入指针ptr所指的内存区域中,读取的数据共n项,每项size个字节。
例10.5 二进制文件格式化输入输出实例。
程序如下:
程序执行情况和例10.3相同。不同的是,本例用二进制输出函数实现,程序中用结构体类型变量存储数据,再用fwrite函数将这个长度为26个字节的数据块写入stu_list文件中。而且,本例处理的数据直接生成二进制文件,在内存与外存频繁交换数据的情况下,二进制文件的读取效率较高。
2.文件的定位
文件中有一个位置指针,指向当前读写的位置。当打开一个文件时,该指针指向文件的开头,当顺序读写该文件时,每次读写完一个字符后,该指针自动指向下一个字符位置。若想改变这种规律,使位置指针指向其他位置,可使用以下文件定位的函数。
①void rewind(FILE*fp)
重新位置指针函数。该函数的功能是使位置指针重新返回文件的开头。此函数无返回值。
②void fseek(FILE*fp,long m,int n)
随机定位函数。该函数的功能是将位置指针指向新位置,该位置距离起始点n有m个字节的位移量,起始点n的值有三个,分别代表三个位置,具体见表10-2。
表10-2
例如:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。