实验十一文件操作一实验目的1)掌握文件的基本概念,包括文本文件和二进制文件。2)理解文件类型指针、文件结束标志等概念。3)掌握文件指针的定义、并了解文件指针的作用。4)掌握文件的基本操作及文件操作函数的调用形式,包括文本文件和二进制文件的打开和关闭操作、读写操作、文件结束的使用等。二程序示例[源程序2-1]将一个磁盘文件中的信息复制到另一个磁盘文件中。1#include<stdio.h>2int main()3FILE*in,*out;//文件指针4char ch;5if((in=fopen("d:|lin.txt","r"))==NULL》//打开源文件6printf("Can not open in fileln");7return-1;819if((out=fopen("d:lout.txt","w"))==NULL)//打开目标文件10printf("Can not open out file|n");11return-1;12113while((ch=fgetc(in)!=EOF)//开始文件内容复制直至源文件内容结束14if(fputc(ch, out)==EOF)15return-1;16111718fclose(in);//关闭源文件19fclose(out);//关闭目标文件20returnO;21
实验十一 文件操作 一 实验目的 1) 掌握文件的基本概念,包括文本文件和二进制文件。 2) 理解文件类型指针、文件结束标志等概念。 3) 掌握文件指针的定义、并了解文件指针的作用。 4) 掌握文件的基本操作及文件操作函数的调用形式,包括文本文件和二进制文 件的打开和关闭操作、读写操作、文件结束的使用等。 二 程序示例 [源程序 2-1] 将一个磁盘文件中的信息复制到另一个磁盘文件中。 1 #include <stdio.h> 2 int main(){ 3 FILE *in, *out;//文件指针 4 char ch; 5 if( ( in = fopen("d:\\in.txt", "r") ) == NULL ){ //打开源文件 6 printf("Can not open in file\n"); 7 return -1; 8 } 9 if( ( out = fopen("d:\\out.txt", "w") ) == NULL ){ //打开目标文件 10 printf("Can not open out file\n"); 11 return -1; 12 } 13 while( (ch=fgetc(in))!=EOF ){ //开始文件内容复制直至源文件内容结束 14 if(fputc(ch, out)==EOF){ 15 return -1; 16 } 17 } 18 fclose(in); //关闭源文件 19 fclose(out); //关闭目标文件 20 return 0; 21 }
[程序输入]zhang<回车>zhang<回车>zhang<回车>zhang<回车>Li<回车>Li<回车>Wang<回车>Wang<回车>zhang<回车>Li<回车>[程序输出]程序运行完成后在D盘的根目录生成一个out.txt文件。使用记事本打开这两个文件,会发现文件内容完全相同。[程序分析]程序第5行通过fopen()函数的"r"参数打开现有的文件in.txt,并将文件指针赋给in来读取其中的内容。第9行通过fopen()函数的"w"参数创建文件out.txt,并将文件指针赋给out来写入数据。本程序涉及的文件类型均为文本文件。文件复制的过程是第13-17行通过fgetc()函数每次读入一个字符,通过fputc()函数每次写入一个字符实现的。[注意]该程序通过文件指针in以读方式打开D盘上的in.txt文本文件,因此在D盘的根目录下一定要存在这个文件,否则将会产生文件打开错误提示信息。可以在程序运行前通过资源管理器在D盘根目录创建这个文件,并在其中添加若干内容。[源程序2-2]通过程序创建一个二进制文件,并将一组学生信息存入该文件。然后从文件中读出这些数据显示在屏幕上,同时保存到另外一个文本文件中。1#include<stdio.h>2structstu3{
[程序输入] zhang<回车> zhang <回车> zhang<回车> zhang <回车> Li<回车> Li <回车> Wang<回车> Wang<回车> zhang <回车> Li<回车> [程序输出] 程序运行完成后在 D 盘的根目录生成一个 out.txt 文件。使用记事本打开这 两个文件,会发现文件内容完全相同。 [程序分析] 程序第 5 行通过 fopen()函数的"r"参数打开现有的文件 in.txt,并将文件指针 赋给 in 来读取其中的内容。第 9 行通过 fopen()函数的"w"参数创建文件 out.txt, 并将文件指针赋给 out 来写入数据。本程序涉及的文件类型均为文本文件。文件 复制的过程是第 13-17 行通过 fgetc()函数每次读入一个字符,通过 fputc()函数每 次写入一个字符实现的。 [注意] 该程序通过文件指针 in 以读方式打开 D 盘上的 in.txt 文本文件,因此在 D 盘 的根目录下一定要存在这个文件,否则将会产生文件打开错误提示信息。可以在 程序运行前通过资源管理器在 D 盘根目录创建这个文件,并在其中添加若干内 容。 [源程序 2-2]通过程序创建一个二进制文件,并将一组学生信息存入该文件。然 后从文件中读出这些数据显示在屏幕上,同时保存到另外一个文本文件中。 1 #include <stdio.h> 2 struct stu 3 {
4int num;5char name[20];6int age;7}stTemp, st[]={1,"zhang",22],[2,"li",23],[3,"wang",20]8int main()t9inti;10FILE *fp, *fpTxt;11/*以二进制写方式打开文件*/12if((fp =fopen("stu_list.bin","wb"))==NULL)13/*打开文件出错处理*/14printf("can not open outfile)n");15return -1;11617/*将学生信息(结构)写入文件*/18if( (fwrite( st, sizeof(struct stu), 3, fp ) == 0 )19/*写过程中的出错处理*/20printf("file wirte errorln");21return-1;22123fclose(fp);24/*以二进制写读方式打开文件*/25if((fp=fopen("stu list.bin","rb"))==NULL)26/*打开文件出错处理*/27printf("can not open outfileln");28return-1;29130/*以文本方式打开文件*/31if((fpTxt =fopen("stu_ list.txt","w"))== NULL)32/*打开文件出错处理*/33printf("can not open outfile)n");34return-1;35136for(i = 0; i< 3; i++ )K37/*将学生信息(结构)以数据块形式读入内存*/38if(fread(&stTemp, sizeof(struct stu),1,fp)==1)
4 int num; 5 char name[20]; 6 int age; 7 }stTemp, st[]={{1,"zhang",22},{2,"li",23},{3,"wang",20}}; 8 int main(){ 9 int i; 10 FILE *fp, *fpTxt; 11 /* 以二进制写方式打开文件 */ 12 if( ( fp = fopen("stu_list.bin", "wb") ) == NULL ){ 13 /* 打开文件出错处理 */ 14 printf("can not open outfile\n"); 15 return -1; 16 } 17 /* 将学生信息(结构)写入文件 */ 18 if( ( fwrite( st, sizeof(struct stu), 3, fp ) == 0 )){ 19 /* 写过程中的出错处理 */ 20 printf("file wirte error\n"); 21 return -1; 22 } 23 fclose(fp); 24 /* 以二进制写读方式打开文件 */ 25 if( ( fp = fopen("stu_list.bin", "rb") ) == NULL ){ 26 /* 打开文件出错处理 */ 27 printf("can not open outfile\n"); 28 return -1; 29 } 30 /* 以文本方式打开文件 */ 31 if( ( fpTxt = fopen("stu_list.txt", "w") ) == NULL ){ 32 /* 打开文件出错处理 */ 33 printf("can not open outfile\n"); 34 return -1; 35 } 36 for( i = 0; i < 3; i++ ){ 37 /* 将学生信息(结构)以数据块形式读入内存 */ 38 if( fread(&stTemp, sizeof(struct stu), 1, fp) == 1 ){
39*显示在屏幕上*/40printf("%d, %s,%dn", stTemp.num, stTemp.name, stTemp.age);41/*保存在文件中*/42fprintf(fpTxt,"%d,%s,%d)n",stTemp.num,stTemp.name,stTemp.age);14344145fclose(fp);46return O;47 1[程序输出]程序运行完成后会在所在的位置生成stulist.txt和stulist.bin文件。同时在屏幕上显示了三个学生的信息。1,zhang,222, li, 233,wang,20[程序分析]该程序演示了对二进制文件进行操作的方法。程序在打开文件的过程中使用了"wb"作为fopen函数的参数。对二进制数据的读写中使用了fread()和fwrite()函数,需要提醒注意的是,这两个函数只能操作二进制的文件,如果对文本文件操作,读入或者写入的数据往往有错误。此外在stulist.txt文件中,采用的方式是文本格式的输出,当程序运行完成以后,可以使用记事本打开对比stulist.txt和stulist.bin文件,看看有何不同。三、程序编写从键盘输入4位学生的数据(学生数据包括学号、姓名和三门课的成绩),然后将它们转存到磁盘文件中
39 /* 显示在屏幕上 */ 40 printf("%d, %s, %d\n", stTemp.num, stTemp.name, stTemp.age); 41 /* 保存在文件中 */ 42 fprintf(fpTxt,"%d, %s, %d\n", stTemp.num, stTemp.name, stTemp.age); 43 } 44 } 45 fclose(fp); 46 return 0; 47 } [程序输出] 程序运行完成后会在所在的位置生成 stu_list.txt 和 stu_list.bin 文件。同时在 屏幕上显示了三个学生的信息。 1, zhang, 22 2, li, 23 3, wang, 20 [程序分析] 该程序演示了对二进制文件进行操作的方法。程序在打开文件的过程中使用 了"wb"作为 fopen 函数的参数。对二进制数据的读写中使用了 fread()和 fwrite() 函数,需要提醒注意的是,这两个函数只能操作二进制的文件,如果对文本文件 操作,读入或者写入的数据往往有错误。此外在 stu_list.txt 文件中,采用的方式 是文本格式的输出,当程序运行完成以后,可以使用记事本打开对比 stu_list.txt 和 stu_list.bin 文件,看看有何不同。 三、程序编写 从键盘输入 4 位学生的数据(学生数据包括学号、姓名和三门课的成绩),然 后将它们转存到磁盘文件中