您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > lesson20数据的组织结构二文件
Lesson20数据文件及其操作1/40输入/输出的概念及学习目标31学会读写数据文件操作系统的标准输入/输出设备:键盘/显示器如果需要改变输入/输出的流向,需要重定向另一个输入/输出的对象就是磁盘数据文件使用数据文件来建立程序中的数据或保存数据到文件中,是C程序设计的习惯用法。2/403文件的概念2文件:是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。操作系统是以文件为单位对数据进行管理的。例如:C:\24000101\program.c,其中k:\24000101叫路径,program.c是文件名。当需要使用文件的时候,需要将文件调入内存中。3/403C语言中使用的数据文件的概念2从文件编码和数据的组织方式来看,数据文件可分为ASCII码文件和二进制码文件。也叫文本文件文件程序数据区输出文件缓冲区输入文件缓冲区磁盘上内存中操作系统在内存中的缓冲区4/403文件的概念2ASCII数据文件:文件在磁盘中存放时每个字符占一个字节,每个字节存放相应字符的ASCII码值。二进制数据文件:存储介质上保存的数据采用与内存数据一致的表示形式存储(为二进制形式)。例:在文件中存放整数2147483647ASCII码32H31H34H37H34H38H33H36H34H37H二进制FFHFFHFFH7FHC语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。一个输入输出流就是一个字节流或二进制流。5/40文件的位置指针位置指针用来指示当前的读写位置。一般情况下,在对字符文件进行顺序读写时,文件的位置指针指向文件开头,这时如果对文件进行读的操作,就读第一个字符,然后文件的位置指针顺序向后移一个位置,在下一次执行读的操作时,就将指针指向的第二个字符读入。依此类推,直到遇文件尾.↑↑↑文件头读写当前位置文件尾有时希望在一个文件的原有数据之后再添加新的数据,应该把文件位置指针移到文件尾,然后再接着写入新的数据,这就是文件的追加。6/403文件的操作3文件的基本操作定义文件指针定义格式为:FILE*文件指针变量;例如FILE*fp;FILEf[5];文件的打开文件指针=fopen(文件名,操作模式)fp=fopen(c:\\file.dat,r));if((fp==NUUL){printf(“\nCannotopenthefile”);return1;}7/403文件的操作3文件使用方式含义r只读,文本以只读方式打开一个已有的文本文件。w只写,文本以只写方式建立一个新的文本文件。如果该文件已存在则将它删去,然后重新建立一个新文件。a追加,文本以添加方式打开一个文本文件,在文件末尾添加。如果该文件不存在,则建立一个新文件后再添加。rb只读,二进制以只读方式打开一个已有的二进制文件。wb只写,二进制以只写方式打开一个二进制文件。ab追加,二进制以添加方式打开一个二进制文件。8/403文件的操作3打开文件文件方式文件使用方式含义r+读写,文本以读写方式打开一个已有的文本文件。w+读写,文本以读写方式建立一个新的文本文件。a+读写,文本以读写方式打开一个文本文件,在文件末尾添加和修改,如果文件不存在,则建立一个新文件后再添加和修改。rb+读写,二进制以读写方式打开一个已有的二进制文件。wb+读写,二进制以读写方式建立一个新的二进制文件。ab+读写,二进制以读写方式打开一个二进制文件。9/403文件的操作3文件的关闭fclose(文件指针);例如:fclose(fp);文件的读写操作字符读写函数:fgetc()和fputc()字符串读写函数:fgets()和fputs()数据块读写函数:fread()和fwrite()格式化读写函数:fscanf()和fprinf()返回值:关闭成功返回值为0;否则返回EOF(-1)10/403文件的操作4字符读写操作1、fgetc()的调用格式:字符型变量=fgetc(文件指针);例如:ch=fgetc(fp);语句功能是:从fp指向的文件中读取一个字符并将这个字符赋给char型变量ch。遇结束,返回EOF。2、fputc()的调用格式:fputc(字符,文件指针);例如:fputc(ch,fp);语句功能是:将字符型变量ch的内容写入文件指针fp所指的文本文件中。写入成功,返回字符本身,反之EOF。11/40读文件基本过程#includestdio.hintmain(){inti,x;FILE*fp;fp=fopen(array.txt,r);if(fp==NULL){printf(文件不存在);exit(0);}printf(从文件中读取的数据:\n);for(i=1;i10;i++){fscanf(fp,%d,&x);if(i%5==0)printf(\n);printf(%4d,x);}fclose(fp);return0;}1、定义FILE指针2、打开文件3、确保文件有效4、用函数读文件5、关闭文件写文件基本过程#includestdio.hintmain(){inti,x;FILE*fp;fp=fopen(array2.txt,“w);if(fp==NULL){printf(文件不存在);exit(0);}printf(从文件中读取的数据:\n);for(i=1;i10;i++){scanf(%d,&x);fprintf(fp,%4d,x);}fclose(fp);return0;}1、定义FILE指针2、打开文件3、确保文件有效4、用函数往文件写数据5、关闭文件a和w的区别#includestdio.hintmain(){inti,x;FILE*fp;fp=fopen(array.txt,“a);if(fp==NULL){printf(文件不存在);exit(0);}printf(从文件中读取的数据:\n);for(i=1;i10;i++){scanf(%d,&x);fprintf(fp,%4d,x);}fclose(fp);return0;}打开文件方式二进制文件和文本文件#includestdio.hintmain(){inti,x;FILE*fp;fp=fopen(array4.txt,wb);if(fp==NULL){printf(文件不存在);exit(0);}printf(将从键盘输入数据写入文件:\n);scanf(%d,&x);fwrite(&x,sizeof(x),1,fp);fclose(fp);return0;}#includestdio.hintmain(){inti,x;FILE*fp;fp=fopen(array5.txt,w);if(fp==NULL){printf(文件不存在);exit(0);}printf(将从键盘输入数据写入文件:\n);scanf(%d,&x);fprintf(fp,%d,x);fclose(fp);return0;}二进制文件和文本文件20_e.c3文件的操作4例1:读取一个给定的文本文件,并将文件的内容显示在屏幕上。问题分析需要读取文本文件,所以以“r”操作模式将文件打开。文本文件的结束标志为EOF(-1)。当文件读写指针指向EOF时,表示文件已经读到了尾部。因此,在读文件时,需要设计一个while循环语句,它的结束条件是读取的字符等于EOF。需要读取的文件名称通过命令行参数带入,这样可以扩展程序的使用范围,增加程序运行的灵活性。17/40算法描述开始结束ch!=EOF非空行NNargs!=2输出提示信息输出chYYYN打开不成功输出提示信息fgetc()chfclose()fgetc()ch18/40#includestdio.hintmain(){FILE*fp;intch;charname[100];printf(“请输入文件名:\n”);gets(name);fp=fopen(name,r);if(fp==NULL){/*打开文件*/printf(Cannotopenfile!);return1;}ch=fgetc(fp);/*以字符方式读取文件*/while(ch!=EOF){putchar(ch);ch=fgetc(fp);}fclose(fp);/*关闭文件*/return0;}19/403文件的操作4字符串读写操作1、fgets()的调用格式:fgets(字符数组名,n,文件指针);例如:fgets(str,n,fp);语句功能是:从fp所指的文件中读出n-1个字符并存入字符数组str中。2、fputs()的调用格式:fputs(字符串,文件指针);例如:fputs(“Cprogram”,fp);语句功能是:将字符串“Cprogram”写入fp所指的文件中。20/403文件的操作4例2:编程从键盘输入一个源文件的文件名和一个目的文件的文件名,将源文件的内容拷贝到目的文件中。21/40#includestdio.hintmain(){FILE*fp1,*fp2;charstr[20],srcName[20],desName[20];gets(srcName);gets(desName);if((fp1=fopen(srcName,r))==NULL){printf(file1opennederror.\n);exit(0);}if((fp2=fopen(desName,w))==NULL){printf(file2createderror.\n);exit(0);}while(fgets(str,20,fp1)!=NULL)fputs(str,fp2);fclose(fp1);fclose(fp2);return0;}22/40#includestdio.h#includestring.hintreadFile(charlines[][80]);voidwriteFile(charlines[][80],intn);main(){intchoice,num;charlines[100][80];do{/*显示菜单*/printf(\n==========MENU==========\n);printf(\nreadfile.................1);printf(\nwritefile................2);printf(\nexit......................3);printf(\nselect:);scanf(“%d”,&choice);getchar();/*用户选择*/if(choice==1)num=readFile(lines);if(choice==2)writeFile(lines,num);}while(choice!=3);}例3:P214例6-1323/40intreadFile(charlines[][80])*读文件*/{inti;FILE*fp;charfilename[30];printf(“\nEnterfilename:”);/*输入要进行写操作的文件名*/gets(filename);if((fp=fopen(filename,“r”))==NULL){/*打开文件*/printf(Cannotopenfile!);return0;}for(i=0;!feof(fp);i++){/*读取并显示文件*/fgets(&lines[i][0],80,fp);puts(&lines[i][0]);}fclose(fp);returni;}24/40voidwriteFile(charlines[][80],intn)/*写文件*/{FILE*fp;charfilename[30];printf(“\nEnterfilename:”);/*输入要进行写操作的文件名*/gets(filename);if((fp=fopen(filename,“w”))==NULL){/*打开文件*/printf(Cannotopenfile!);return
本文标题:lesson20数据的组织结构二文件
链接地址:https://www.777doc.com/doc-841665 .html