教学材料《C语言》-项目十二 操作文件_第1页
教学材料《C语言》-项目十二 操作文件_第2页
教学材料《C语言》-项目十二 操作文件_第3页
教学材料《C语言》-项目十二 操作文件_第4页
教学材料《C语言》-项目十二 操作文件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务一

打开关闭文件1.文件的分类文件可以从不同的角度进行分类:(1)根据文件的内容来分:可分为源程序文件、目标文件、可执行文件和数据文件等。(2)根据文件的组织形式来分:可分为顺序存取文件和随机存取文件。(3)根据文件的存储形式来分:可分为ASCⅡ码文件(又称文本文件)和二进制文件。他的每一个字节存储一个ASCⅡ码(代表1个字符)。二进制文件是把内存中的数据,原样输出到磁盘文件中。下一页返回任务一

打开关闭文件2.读文件与写文件所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件是指,从计算机内存向盘文件中传送数据的操作。如图12-2所示。3.文件类型系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义,取名为FILE(注意:“FILE”必须大写)。并放在<stdio.h>头文件中。上一页下一页返回任务一

打开关闭文件4.缓冲文件系统(标准I/O)

所谓缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从磁盘文件向内存读入数据时,首先将一批数据读入到文件缓冲区中,再从文件缓冲区将数据逐个送到程序数据区。如图12-3所示。从内存向磁盘输出数据时,则正好相反;必须先将一批数据输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。如图12-4所示。返回上一页下一页任务一

打开关闭文件一、打开文件1.格式:fopen(“文件名”,“操作方式”);(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。(2)“操作方式”如表12-1所示。2.功能:返回一个指向指定文件的指针。返回上一页下一页任务一

打开关闭文件3.说明(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定为0)。常用下面的方法打开一个文件:

if((p=fopen(“文件名”,”操作方式’))==NULL){printf(“cannotopenthisfile\n”);exit(0);/*关闭打开的所有文件,程序结束运行,返回操作系统*/}上一页下一页返回任务一

打开关闭文件(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写指针指向文件头;使用后者时,读写指针指向文件尾。(3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。上一页下一页返回任务一

打开关闭文件(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:

1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。

2)标准输出文件——stdout:指向终端输出(一般为显示器)。

3)标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。上一页下一页返回任务一

打开关闭文件二、关闭文件在使用完一个文件后,为防止被误用或数据丢失,应该及时关闭。(1)用法:fclose(文件指针);(2)功能:关闭“文件指针“所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。例如,fclose(fp);/*关闭fp所指向的文件*/返回上一页任务二

读写文件一、

字符读写函数1.将一个字符写到文件中——fputc()函数#include”stdio.h”main(intargc,char*argv[]){FILE*fp;charch;if(argc!=2)/*参数个数不对*/{printf(“thenumberofargumentsnotcorrect\n\n”);prinft(“Usage:可执行文件名filename\n”);exit(0);}返回下一页任务二

读写文件if((fp=fopen(argv[1],”w”))==NULL)/*打开文件失败*/{printf(“cannotopenthisfile\n”);exit(0)

}for(;(ch=getcher())!=’@’;)fputc(ch,fp);/*输入字符并存储到文件中*/fclose(fp):/*关闭文件*/}

程序运行准备:在Options|Arguments文本框中,输入文件名“temp.txt”。注:只要符合文件命名规则,读者完全可以根据自己的习惯或爱好,给文件另外命名。程序运行情况:

abcdefg1234567@←┘上一页下一页返回任务二

读写文件2.从文件中读入一个字符——fgetc()函数和feof()函数【例12.2】顺序显示【例12.1】创建的ASCⅡ码文件。#include”stdio.h”main(intargc,char*argv[]){FILE*fp;charch;if(argc!=2)/*参数个数不对*/{printf(“thenumberofargumentsnotcorrect\n”);上一页下一页返回任务二

读写文件printf(“\nUsage:可执行文件名sourcefile”)exit(0)}if((fp=fopen(argv[1],”r”))==NULL)/*打开源文件失败*/{printf(“cannotopensourcefile\n”);exit(0)}/*顺序输出文件的内容*/for(;(ch=fgect(fp))!=EOF;)putchar(ch);/*顺序读入并显示*/fclose(fp);/*关闭打开的文件*/}上一页下一页返回任务二

读写文件程序运行准备:在Options|Arguments文本框中,输入文件名“temp.txt”。程序运行情况:

abcdefg1234567@←┘程序说明:for(;(ch=fgetc(fp))!=EOF;)putchar(ch);语句(1)循环语句中的库函数fgetc()

1)用法:intfgetc(文件指针);

2)功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。上一页下一页返回任务二

读写文件二、字符串读写函数【例12.4】将键盘上输入的一个长度不超过80的字符串,以ASCⅡ码形式存储到一个磁盘文件中;然后再输出到屏幕上。

/*程序功能:从键盘上输入一个字符串,存储到一个磁盘文件中、并显示输出*//*参数:带参主函数,使用格式:可执行文件名要创建的磁盘文件名*/上一页下一页返回任务二

读写文件#include”stdio.h”main(intargc,char*argv[]){FILE*fp;/*文件类型名“FILE”,必须大写*/charstring[81];/*字符数组用于暂存输入输出的字符串*/if(argc>2)/*参数太多,提示出错*/{printf(“Toomanyparamenters…\n\n”);exit(0);}if(argc==1)/*缺磁盘文件名,提示输入*/{printf(“Inputthefilename:”);上一页下一页返回任务二

读写文件gets(string);/*借用string数组暂存输入的文件名*/argv[1]=(char*)malloc(strlen(string)+1);/*给文件名参数申请内存空间*/strcpy(argv[1],string);/*复制文件名到形参中*/}if((fp=fopen(argv[1],”w”))==NULL)/*打开文件失败*/{printf(“cannotopenthisfile\n”);exit(0)}/*从键盘上输入字符串,并存储到指定文件中*/上一页下一页返回任务二

读写文件printf(“Inputastring:“);gets(string);/*从键盘上输入到字符串*/fputs(string,fp);/*存储到指定文件*/fclose(fp);/*重新打开文件,读出其中的字符串,并输出到屏幕上*/if((fp=fopen(argv[1],”r”))==NULL)/*打开文件失败*/{printf(“cannotopenthisfile\n”);exit(0);}fgets(string,strlen(string)+1,fp);/*从文件中读出一个字符串*/printf(“Outputthestring:“);puts(string);/*将字符串输出到屏幕上*/fclose(fp);}上一页下一页返回任务二

读写文件程序说明:(1)基本思路为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行(当然,也可以取第1个参数作为文件名,忽略多余的);而遗漏文件名时,提示用户输入。同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。一言以蔽之,程序设计的最高境界就是,一切为用户着想!请读者仔细体会。(2)缺磁盘文件名时的键盘输入上一页下一页返回任务二

读写文件(3)fputs(str-in,fp);语句中的库函数fputs()——向指定文件输出一个字符串(4)fgets(str-out,strlen(str-in)+1,fp);语句中的库函数fgets()——从文件中读一个字符串(5)fgets()、fputs()函数与gets()、puts()函数比较。上一页下一页返回任务二

读写文件三、数据块读写函数

fgetc()和fwrite()函数一次只能读/写的1个字节数据,但实际应用中却常常要求1次读/写1个数据块(连续的若干字节)。为此,ANSIC标准设置了fread()和fwrite()函数。(1)用法:intfread(void*buffer,intsize,intcount,FILE*fp);intfwrite(void*buffer,intsize,intcount,FILE*fp);上一页下一页返回任务二

读写文件(2)功能:

fread()——从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时将读写位置指针向前移动size*count个字节。其中,buffer是存放读入数据的起始地址(即存放何处)。

fwrite()——从buffer开始,一次输入size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size*count个字节。其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。

fread()和fwrite()函数一般用于二进制文件的处理。上一页下一页返回任务二

读写文件四、格式化读写函数与scanf()和printf()函数的功能相似,它们都是格式化输入输出函数,区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。

fscanf()和fprintf()函数的用法如下:

intfscanf(文件指针,“格式符”,输入变量首地址表);

intfprintf(文件指针,“格式符”,输入参量表);上一页下一页返回任务二

读写文件五、读/写函数选用原则从功能角度来说,fscanf()和fprintf()函数可以完成文件的任何数据读/写操作。但为方便起见,依下列原则选用:读/写一个字符(或字节)数据时:选用fgetc()函数和fputs()函数。读/写一个字符串时:选用fgets()和fputs()函数。读/写一个(或多个)不含格式的数据时:选用fread()和fwrite()函数。读/写一个(或多个)含格式的数据时:选用fscanf()和fprintf()函数。返回上一页下一页任务二

读写文件六、文件定位函数1.位置指针复位函数rewind()用法:intrewind(文件指针);功能:使文件的位置指针返回到文件头。2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论