版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计技术C语言数据描述和C程序设计初步
结构化程序设计基础和C语言的控制结构
数组及其应用
函数与C程序结构
指针与函数
指针与数组
字符串及其应用结构体类型和联合体类型C语言的文件处理及其应用位运算与枚举类型第9章C语言文件处理及其应用
文件概念与文件类型指针
C语言中的文件处理基础文件的读写操作和顺序文件处理文件的定位操作和随机文件处理9.1文件概念与文件类型指针程序设计中所涉及的数据:内存数据
变量、数组、构造数据类型数据对象等。其主要优点是处理速度快;主要缺陷是信息容量差、再现性能差、保存功能低以及共享能力弱等。外存数据
字符、记录、文件、数据库等。特点是:信息容量大、再现能力强、能够长期保存以及共享能力强等,从而大大提高了计算机数据处理能力。9.1.1文件的概念文件的概念 文件是程序设计中一种重要的数据类型。所谓“文件”就是一个有名字的、存储在某种介质上的、相关信息的集合。如一批二进制数、一组数据、一个程序,图形、图象、声音、计算机外部设备等。使用文件的目的
将数据永久地保存在计算机外部存储介质上,使之成为可以共享的信息。通过文件还可以与其他信息处理系统联系;可以进行大量的原始数据的输入和保存,以适应计算机系统在各方面的应用;
文件的分类:
按文件的结构形式分类二进制文件二进制文件是把内存中的数据按其在内存中的存储形式原样存放到计算机外部存储设备。文本文件文本文件是全部由字符组成的具有行列结构的文件,即文件的每个元素都是字符或换行符,文本文件又称为ASCII码文件。9.1.1文件的概念213210292824(一万)10000除2取余得等值二进制值:“0”的ASCII码值是48,NULL码值才是全零。文件的分类:
按文件的读写方式分类顺序文件
C语言中将文件看成是一个字符流,并不考虑其存储时的界限,对文件的读写是以字符或字节为单位程序的控制而不是受回车换行符的控制。这种文件一般称之为“流式文件”。随机文件具有随机读写功能的文件称为随机文件。在随机文件中,对文件任一元素的读写不必象顺序文件那样从头开始,而是可以直接对文件的某一元素进行访问。9.1.1文件的概念按文件存储的外部设备分类磁盘文件在程序的运行过程中,通常需要将一些数据信息输出到磁盘上保存起来,需要的时候再从磁盘中将其输入到内存进行处理,这种保存在磁盘上的文件称为磁盘文件。设备文件在C程序的设计中,将所有的计算机系统外部设备都作为文件对待,这样的文件称为设备文件。有三个称为标准系统设备的特殊设备文件,它们由系统分配和控制,这三个设备文件是: 标准输入文件stdin:由系统指定为键盘 标准输出文件stdout: 由系统指定为显示器 标准错误输出文件stderr:由系统指定为显示器(三个标准系统设备文件进入系统时自动打开,退出系统时自动关闭)正常输出的数据会输出到标准输出文件将错误信息送到标准错误文件中
9.1.1文件的概念
按系统对文件的处理方法分类
缓冲文件系统系统自动在内存中为每个正在使用的文件开辟一个缓冲区。从内存输出数据到磁盘文件:内存→系统缓冲区→磁盘从磁盘文件输入数据到内存:磁盘→系统缓冲区→内存
非缓冲文件系统系统不自动为程序开辟确定大小的文件缓冲区,由程序为每个正在使用的文件设置并管理缓冲区。9.1.2文件类型指针文件类型文件类型是由系统建立的一个结构体类型,其类型名为FILE,在头文件<stdio.h>中已经定义。使用缓冲文件系统,当要求打开/建立一个文件时系统自动在系统内部定义一个FILE数据类型的结构体变量,将该文件的各种描述信息和控制信息存放在该结构体变量中。如文件名字、文件的状态、文件读写指针的当前位置等。在C语言中,通过指向这个FILE类型结构体变量的指针来操作文件。9.1.2文件类型指针VisualC++编译器中对FILE结构体类型定义如下:在“stdio.h”中有如下定义
struct_iobuf{char*_ptr;//文件输入的下一个位置
int_cnt;//当前缓冲区的相对位置
char*_base;//指基础位置(即是文件的起始位置)
int_flag;//文件标志
int_file;//文件的有效性验证
int_charbuf;//检查缓冲区状况,如果无缓冲区则不读取
int_bufsiz;//文件的大小
char*_tmpfname;//临时文件名
};typedefstruct_iobufFILE;
对文件的描述信息及控制信息等都放于该结构体中9.1.2文件类型指针C程序中对文件的控制程序中若要处理文件,需先定义一个文件类型指针变量,如果需要同时处理若干个文件,则需要定义若干个文件类型指针。定义文件类型指针变量一般形式如下:
FILE*fp1,*fp2,…,*fpn;
通过使用文件类型指针变量调用系统提供的文件处理标准库函数对文件进行打开、关闭、读写等各种操作。第9章C语言文件处理及其应用
文件概念与文件类型指针
C语言中的文件处理基础文件的读写操作和顺序文件处理文件的定位操作和随机文件处理9.2.1文件的打开与关闭文件进行操作的一般步骤打开/建立要操作的文件;对文件进行处理(读写等操作);关闭被操作的文件;文件的打开
用标准函数fopen实现打开/建立文件的操作
fopen函数的使用形式为:
FILE*fpt; /*指向文件类型的指针变量fpt*/ fpt=fopen(file_name,file_mode);file_name
将要访问的文件名字,可以使用值为字符串类型的变量或用双引号括起来的字符串常量;
file_mode
指定文件模式,即文件操作方式。file_mode功能“r”以只读方式打开一个已有的文本文件“w”以只写方式建立一个文本文件“a”以添加方式打开一个文本文件“rb”以只读方式打开一个已有的二进制文件“wb”以只写方式建立一个二进制文件“ab”以添加方式打开/建立一个二进制文件注意:如果要打开/建立读写模式的文件,在上述对应模式上添“+”加号表示,例如,“r+”表示打开以读方式为主的读写文本文件。9.2.1文件的打开与关闭P299表9.1文件的打开
fopen函数正常地打开或建立了指定文件时,将返回系统中建立的文件类型结构体变量的地址;若fopen函数没有正常地完成打开或建立文件的任务,则会带回一个出错信息并返回一个空指针值NULL。if((fpt=fopen(file_name,file_mode))==NULL) {printf(“Can’topenthisfile!\n”); exit(0); }9.2.1文件的打开与关闭9.2.1文件的打开与关闭文件的关闭
使用完文件后应及时地对文件进行关闭,及时关闭文件的理由至少有以下两点:使用缓冲文件系统时,如果数据缓冲区未满而又不关闭文件就退出程序的运行,则会造成数据缓冲区内的数据丢失。一个系统内能够同时打开的文件有一定的数量限制。如果不及时地关闭已经不使用的文件,就可能造成打开其他文件时出错。用标准函数fclose关闭文件
函数原型:intfclose(FILE*stream);
调用形式:fclose(文件指针);
函数功能:将与指定文件指针相关联的文件关闭。
fclose函数正常关闭了文件,返回0,否则返回EOF(-1)。9.2.1文件的打开和关闭例9-1
从键盘上输入所要创建文件的路径(即存放目录)和文件名字,创建一个用于写操作的文本文件。(P300)printf("请输入欲创建文件所在的目录名:");gets(PathName);e:\book(该目录必须存在即先建立好)printf("请输入欲创建文件文件名:");gets(FileName);mydata.txtstrcpy(FullName,PathName);strcat(FullName,"\\");strcat(FullName,FileName);if((fp=fopen(FullName,"w"))==NULL) { printf("Can'tcreatefile%s!\n",FullName);return;}elseprintf("创建文件%s成功......\n",FullName);fclose(fp);生成文件名e:\book9.2.2文件内部读写位置指针文件指针(程序中必定义)文件指针(FILE类型)是用于关联程序中被操作文件,在程序中必须进行定义,当打开一个文件并用文件指针变量关联后,只要不重新赋值文件指针的值是不变的;
文件内部记录指针(程序不必定义)打开(或创建)一个文件时,系统自动为打开的文件建立一个文件内部读写位置指针(即文件内部记录指针),该指针在文件读写中,用于指示文件的当前读写位置,每读写一次,文件位置指针自动指向下一个读写位置。文件尾的检测程序中需要判断文件是否处理完成,即文件内部记录指针是否已移动到了文件尾标志处。EOF(仅用于文本文件)
由于文本文件中任何字符的编码(ascⅡ码)均不是-1(0-255),可以用-1表示文本文件的文件尾标志,系统中用符号常量EOF来表示。在输入流中表示为ctrl+z。feof(pf)
测试文件状态的函数feof(pf),当文件未结束时feof函数的值为0,否则为非0值。使用函数feof来判断文件是否结束既可用于文本文件,又可用于二进制文件。9.2.3文件尾的检测第9章C语言文件处理及其应用
文件概念与文件类型指针
C语言中的文件处理基础文件的读写操作和顺序文件处理文件的定位操作和随机文件处理字符输入函数fgetc
函数原型:intfgetc(FILE*stream);
函数调用:ch=fgetc(fpt);
函数功能:从指针变量fpt相关联的文件中读取一个字符并将其赋给字符型变量ch;执行函数时遇文件结束符或在执行中出错时返回值为EOF(-1)。字符输出函数fputc
函数原型:intfputc(intc,FILE*stream);
函数调用:fputc(ch,fpt);
函数功能:将字符变量ch的值输出到文件指针fpt相关联的文件中。fputc函数执行成功时,返回输出的字符值,当函数执行发生错误则返回EOF(-1)。9.3.1文件中的单个字符读写操作使用字符读写函数的几点说明fgetc函数所读文件以读(r)或读写(r+)方式打开,fputc函数写入文件用写(w)、读写(w+)、追加(a)方式打开。每读写一个字符,文件内部记录指针自动向后移动一个字节。字符输入输出函数均有一个返回值。如果读、写成功,返回读取或写入的字符,否则返回文件结束符EOF,以此判断文件是否结束或读写操作是否成功。9.3.1文件中的单个字符读写操作9.3.1文件中的单个字符读写操作例9-2
读入例9.1的源程序文件,并在屏幕上显示其内容。
FILE*fp;charch;if((fp=fopen("Ex09-01.cpp","r"))==NULL){ printf("Cannotopenfilestrikeanykeyexit!"); getchar(); return(1);}ch=fgetc(fp);while(ch!=EOF){ putchar(ch); ch=fgetc(fp);}fclose(fp);通过使用fgetc函数的调用,依次从fp所关联的文件“Ex09-01.cpp”中读出其所有字符并显示在屏幕上9.3.1文件中的单个字符读写操作例9-3
将从键盘上输入的若干字符数据写入文本文件mydata.txt,然后再将文件mydata.txt中的字符全部读出并在系统标准输出设备显示器上输出。if((fp=fopen("mydata.txt","w"))==NULL){printf("Can'tcreatefilemydata.txt!\n");return;}printf("请输入写入文件的字符数据:\n");do{ ch=getchar();fputc(ch,fp);}while(ch!=EOF);fclose(fp);if((fp=fopen("mydata.txt","r"))==NULL){printf("Can'topenfilemydata.txt!\n");return;}ch=fgetc(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp);9.3.1文件中的单个字符读写操作例9-4
P304利用单个字符读写标准函数实现文件拷贝功能,要求被拷贝的源文件和生成的目标文件名字都从命令行输入。if(argc!=3){ printf("Using:commandSourcefilenameTargetfilename<CR>\n"); return;}if((in=fopen(argv[1],"rb"))==NULL){ printf("不能打开源文件!\n"); return;}if((out=fopen(argv[2],"wb"))==NULL){ printf("不能打开或创建目标文件!\n"); return;} c=fgetc(in); while(!feof(in)) { fputc(c,out); c=fgetc(in); } fclose(in); fclose(out);9.3.1文件中的单个字符读写操作例9-5
编程序实现统计文本文件中单词个数的功能,要求被统计文件名从命令行上带入。FILE*fp;intcount=0; /*记录单词的个数*/intspace=1; /*空格标志*/charc;if(argc!=2){ printf("Using:commandfilename<CR>\n"); return;}if((fp=fopen(argv[1],"r"))==NULL){ printf("不能打开文件%s\n",argv[1]); return;}while((c=fgetc(fp))!=EOF)switch(c){ case'': case'\t': case'\n': space=1; break; default:if(space) { space=0; count++; }}fclose(fp);printf("文件'%s'中含有%d个单词。\n",argv[1],count);空白字符(空格键、制表键以及换行符)Idon'tlikeClanguage.字符串输入函数fgets
原型:char*fgets(char*string,intn,FILE*stream);
调用:fgets(string,n,fpt);
功能:从文件指针fpt关联的文件中读取n-1个字符,然后在字符串末尾自动加上’\0’并将它们存放到string所代表的字符串对象中。
函数执行的结束:读入n-1个字符;读入n-1个字符前遇到换行符’\n’;读入n-1个字符前遇到文件结束符EOF;
函数的返回值:正常结束时返回string对象的首地址,若读到文件尾或出错则返回NULL。9.3.2文件中的字符串读写操作9.3.2文件中的字符串读写操作例9-7
按每次读入一行的方式读入例9.1的源程序文件,并在屏幕上显示其内容。FILE*fp;charstr[100];if((fp=fopen("Ex09-01.cpp","r"))==NULL){ printf("Cannotopenfile...\n");return;}while(fgets(str,100,fp)!=NULL)printf("%s",str);fclose(fp);存放读出的每一行内容字符串输出函数fputs
原型:intfputs(constchar*string,FILE*stream);
调用:fputs(string,fpt);
功能:将string所代表的字符串写入文件指针fpt相关联的文件。函数fputs正常执行时返回写入文件中的字符个数,函数执行出错时返回值为EOF(-1)。
特别提示:使用fputs标准函数向文件中写入字符串时,每写入一个字串后要自行在其后添加一个分隔字符(‘\n’)。9.3.2文件中的字符串读写操作9.3.2文件中的字符串读写操作例9-8
从键盘上读入若干行字符串并将它们存放到指定文件中,仅输入一个回车时结束输入过程,要求指定文件名从命令行输入。if(argc!=2){printf("Using:commandfilename<CR>\n");return;}if((fp=fopen(argv[1],"w"))==NULL){printf("Can'tcreatefile.!\n");return;}while(strlen(gets(str))>0){fputs(str,fp);fputc('\n',fp);}每一字符串后添加分隔符’\n’直接按回车,输入空串,字符串长度为0。格式化输入函数fscanf
调用:fscanf(fpt,格式控制,地址列表);
功能:以ASCII码值的方式从fpt关联的文件中读取数据,按格式控制字符串中指定的数据格式转换后送到由输入地址列表中相应项指定的内存单元。函数返回值为正确处理的数据项个数。
格式化输出函数fprintf
调用:fprintf(fpt,格式控制,输出表列);
功能:将输出表达式列表的各项由对应格式说明符的格式转换为相应的ASCII码输出到fpt指定的文件中。函数返回值为正确写入文件中字节数。9.3.3文件中的格式化读写操作9.3.3文件中的格式化读写操作例9-9
以10度为间隔,求出0-360度之间的所有正弦函数值和余弦函数值并写入指定文件,然后将该数据读出并显示。for(dec=0;dec<=360;dec+=10){ x=dec*3.14159/180;
fprintf(f,"%5d:%f,%f\n",dec,sin(x),cos(x));}for(i=0;i<=36;i++){
fscanf(f,"%d:%lf,%lf",&dec,&sinx,&cosx);printf("%5d:%f,%f\n",dec,sinx,cosx);}P3119.3.3文件中的格式化读写操作例9-10
将某磁盘文件的所有行加上行号写入指定文件,两个文件的名字均从命令行输入。if((fp1=fopen(argv[1],"r"))==NULL){printf("Can'topenfile.\n");return;}if((fp2=fopen(argv[2],"w"))==NULL){printf("Can'tcreatefile.\n");return;}line=1;while(fgets(buffer,SIZE,fp1)!=NULL)fprintf(fp2,"%4d:%s",line++,buffer);数据块输出函数fwrite
函数调用:fwrite(buffer,size,count,fpt);burrer输出数据在内存中的首地址;size要输出的一个数据项的字节数;count一次操作输出长度size字节的数据项个数fpt指向被操作的文件指针。
功能:从buffer为首地址的内存中取出指定长度数据块(总共count*size字节)写入到fpt相关联的文件中。函数正常操作时返回值为输出数据项数,出错时返回值小于count数据项数。
9.3.4文件中的数据块读写操作例9-11P314
将一个5×15的整型二维数组的数据存入指定文件中(数组数据随机产生),要求文件名从命令行输入。数据块输入函数fread
函数调用:fread(buffer,size,count,fpt);burrer读入数据在内存中的首地址;size要读取的一个数据项的字节数;;count一次操作读取长度size字节的数据项个数;fpt指向被操作的文件指针。
功能:在fpt关联的文件中读取指定长度的数据块(共count*size字节)存放到由buffer指定的内存区域中。函数正常操作时返回值为读取数据项数,出错时返回值小于count数据项数。
9.3.4文件中的数据块读写操作例9-12
将例9.11程序生成的数据文件内容读出并显示到屏幕上,要求文件名从命令行输入。第9章C语言文件处理及其应用
文件概念与文件类型指针
C语言中的文件处理基础文件的读写操作和顺序文件处理文件的定位操作和随机文件处理获取文件内部记录指针当前位置
函数原型:longftell(FILE*stream);
函数调用:ftell(fpt);
函数功能:获取由fpt关联文件的文件内部记录指针的当前位置,用相对于文件头的位移量返回。返回值用字节数表示,出错时返回-1。
9.4.1文件的操作位置指针和文件定位例9-13
利用读字符函数fgetc和ftell函数测试指定文件的字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 头部经络疏通标准流程
- 刮痧排毒理疗执行标准
- 压力皮质醇检测解读指南
- 苹果低温贮藏保鲜技术方案
- 便秘人群膳食纤维补充方案
- 环保突发环境事件应急预案
- 风电机组叶片修复方案
- 风电场塔内施工方案
- 风电场进度管控方案
- 居家老年人日常用药管理安全指引
- 2025届贵州省联考2024-2025学年七年级下学期期中数学试卷(含答案)
- 2025玉门事业单位笔试真题
- 2025年中考生物答题技巧与模式题型03资料分析题解题技巧(学生版+解析)
- 城轨专用通信设备维护授课曾光30课件
- 人教版美术一年级下册《走进旧时光》课件
- 药品电子商务平台合作协议
- 王力《古代汉语》第一册(文选第一部分)课件
- DL-T5418-2009火电厂烟气脱硫吸收塔施工及验收规程
- 高中物理必修1 第六节 超重和失重“十市联赛”一等奖
- 2024人才培养方案汇报
- 小旅馆安全管理制度
评论
0/150
提交评论