首页 百科知识 文件的读写与定位

文件的读写与定位

时间:2024-09-22 百科知识 版权反馈
【摘要】:程序执行情况和例10.3相同。而且,本例处理的数据直接生成二进制文件,在内存与外存频繁交换数据的情况下,二进制文件的读取效率较高。文件中有一个位置指针,指向当前读写的位置。若想改变这种规律,使位置指针指向其他位置,可使用以下文件定位的函数。

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 将一个文本文件的内容复制到另一个文本文件中。程序如下:

img699

img700

程序运行结果如下:

img701

程序运行结果是将file1.c文件中的内容复制到file2.c中去。可以用下面DOS命令验证:

img702

(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用字符串函数编程。

程序如下:

img703

img704

程序运行结果如下:

img705

程序运行结果是将filel.c文件中的内容复制到file2.c中去。

例10.3 向文本文件写入一个字符串。

程序如下:

img706

程序运行结果如下:

img707

程序运行结果是将字符串“welcome to c”写入到文件text.c中去。可以用下面的DOS命令验证

img708

(3)格式化读写文件。

格式化读写函数主要有以下两个:

①int fprintf(FILE*fp,char *format)

格式化输出函数。该函数的功能是按照format规定的格式把数据写入文件指针fp所指的文件中去。其中format参数的含义与printf相同,此函数与printf函数类似。

②int fscanf(FILE*fp,char *format)

格式化输入函数。该函数的功能是按照format规定的格式从文件指针fp所指的文件中读取数据。其用法与scanf函数类似。

例10.4 文件格式化输入输出的实例。

程序如下:

img709

程序运行结果如下:

img710

程序运行结果是将3个学生的基本信息(包括姓名,学号,成绩)写入到文件student.txt中去。可以用下面DOS命令验证:

img711

(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 二进制文件格式化输入输出实例。

程序如下:

img712

程序执行情况和例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

img713

例如:

img714

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈