




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
, 文件的作用:长期保存数据, 程序与文件的关系:,(1) 可通过程序来建立和更新文件内容,(2) 程序中处理的数据可以从文件中获得,10.1 文件的基本概念,计算机可处理的文件:源程序,图形文件、音频文件、数据文件等等。,按数据的组织形式可分为:文本文件、二进制文件,c语言可以对文本文件和二进制文件进行读写操作。,c语言把每一个文件都看作是一个有序的字节流。,流,是文件和程序之间通讯的通道,三种与文件关联的流,(1) 标准输入流 可读取来自键盘的数据,(2) 标准输出流 可把数据打印到屏幕上,(3) 标准错误流 可指出对文件的错误操作类型,缓冲文件系统(标准i/o), 每一个被打开的文件都会在内存开辟一个缓冲区,优越性:提高对数据的处理速度,减少对磁盘的读写次数,非缓冲文件系统(系统i/o), 系统不设置缓冲区,由程序设置,或称低层文件系统,优越性:灵活、高效,提醒:标准i/o与系统i/o分别采用不同的输入/输出函数。,(1) 对文件操作所需的“文件信息”是一结构体变量,且该结构体变量由系统定义,typedef struct short leve1; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned char *curp; unsigned istemp; short tokem; file;,文件指针,定义形式:,(2) 用户只需定义指向文件类型的指针变量即可。,如: file *fp1, *fp2;,(3) 系统对文件提供的信息有,缓冲区的状态,(缓冲区中未被处理的字符个数),文件当前的读写位置,缓冲区的地址,缓冲区的大小, 对任何文件的操作步骤:,打开文件,关闭文件,读或写,10.2 文件的基本操作,标准i/o的读写函数,1. 读写一个字符: fgetc( ); fputc( );,2. 读写一个字符串: fgets( ); fputs( );,3. 格式化读写变量: fscanf( ); fprintf( );,4. 格式化读写一个记录(块): fread( ); fwrite( );,一、文件打开,使用fopen( )函数。,调用方式:,若正确,则返回一个指向该文件的指针。,若错误,则返回错误标志null。,fopen(“文件名“,“文件操作方式“);,10.2.1 建立顺序文件,r 以只读方式打开一个文本文件,w 以只写方式打开一个文本文件,a 以追加方式打开一个文本文件,r+ 以读/写方式打开一个文本文件,w+ 以读/写方式建立一个新的文本文件,a+ 以读/写方式打开一个文本文件,二、文件的打开模式,rb 以只读方式打开一个二进制文件,wb 以只写方式打开一个二进制文件,ab 以追加方式打开一个二进制文件,rb+ 以读/写方式打开一个二进制文件,wb+ 以读/写方式建立一个新的二进制文件,ab+ 以读/写方式打开一个二进制文件,#include main() file *p; p=fopen(“test.txt“, “r“); if (p=null) printf(“file open error n“); else printf(“file open ok /n“); ,例:,讨论,(1) 文件“test.txt”所在位置如何?,(2) 在程序结束之前如果没有关闭打开的文件,文件会不会遭到破坏?,(3) 文件test.txt的内容是什么?,c语言规定:fopen()函数中的文件名可以是当前工作目录(相对路径)下的也可以是指定路径(绝对路径)下的。,如:fopen(“c:dosconfig.sys“, “r“);,三、文件关闭,使用fclose( )函数,调用方式:,作用:关闭一个已打开的文件(释放文件信息区),fclose(文件指针变量);,上例的改进:,#include main( ) file *p; p=fopen(“test.txt“, “r“); if (p= =null) printf(“file open error n“); else 文件处理语句段 fclose(fp); ,四、向文件中写数据的函数, 对文件不论是读还是写,c程序只把文件看作是字节流,注意:,(1) 向文件中写入数据时,若文件不存在, 则系统会创建一个新文件。,(2) 若文件已存在,则,以“w“方式打开文件时,文件原有内容在打开的同时会被冲掉。,以“a“方式打开文件时,文件原有内容保留,向文件写入的内容插入到文件的尾部。,1. 向文件流中输入一个字符,char fputc(char ch, file *fp);,若正确:返回字符ch,若错误:返回eof,2.向文件流中写入一个字符串,int fputs(char *s, file *fp);,若正确:返回一个非负数,若错误:返回eof,3. 按指定的格式向文件流中输入数据,fprintf(file *fp,char *fm,变量名表列);,如:fprintf(fp, “%d %f %s“, a, b, w);,格式字符串,与格式符对应的变量,例:编写一程序,把下面的内容写入文件mytest1.txt中,输入时以字符!作为结束.,#include main( ) file *fp; char ch; fp=fopen(“mytest1.txt“, “w“); if (fp= =null) printf(“file open errorn“); else while (ch=getchar( )!=!) fputc(ch, fp); fclose(fp); ,apple 50 5.5 pear 40 4.4 orange 30 3.3,运行情况如下,例2: 采用字符串输入方式将上面的内容输入到文件mytest2.txt中去,以不输入任何字符直接回车作为输入结束。,apple 50 5.5 pear 40 4.4 orange 30 3.3,#include #include main( ) file *fp; char w20; fp=fopen(“mytest2.txt“, “w“); if(fp= = null) printf(file open errorn“); else while (strlen(gets(w)0) fputs(w, fp); fputs(“n“, fp); fclose(fp); ,(1)若无此语句,程序的运行结果会是怎样的?,(2)怎样结束程序的运行?,思考:,输入的字符串的长度不要超过数组定义的大小,否则会出错。,apple 50 5.5,pear 40 4.4,orange 30 3.3,结果:查看当前目录下的mytest2.txt文件的内容。,运行情况如下:,例3. 按指定输入格式把上面的内容输入到文件 mytest3.txt 中去(以任意单个字符作为输入结束),apple 50 5.5 pear 40 4.4 orange 30 3.3,例:,#include main( ) file *fp; int a; float b; char ch, w20; fp=fopen(“mystest3.txt“, “w“); if (fp= =null) printf(“file open errorn“); else scanf(“%s“, w); while(strlen(w)1 scanf(“%d %f“, ,运行情况如下:,使用 fputc( )、fputs( )、fprintf( )可以达到同一个目的。,17.2.2 读取顺序文件中的数据, 文件的结束标志:eof,1. 从文件流中读取一个字符,fgetc( fp ),返回值:读取的字符,有三个重要的读函数,指向文件的指针,2. 从文件流中读取一字符串(读一行字符):,作用:从文件流中读取 n1 字符,放入数组 s 中。,fgets( char s , int n, *fp);,返回值: s所指的字符串,数组名,n 个字符数,文件指针变量,注意:,(1) 第 n 个字符为系统加入的空字符0,(2) 若在第n1个字符前遇到换行符,停止读写。,(3) 若遇到文件结束或调用出错,返回null,3.按指定格式从文件流中读取变量,fscanf(文件指针变量, 格式控制符字符串,变量地址表列);,作用:从文件流中按指定的格式,读取变量,并将读取的变量保存到对应的变量中。,例:fscanf(fp,“%s %d %f“, name, ,文件指针变量,1. 从文件中读: fread(buffer, size, count, fp);,2. 向文件中写: fwrite(buffer, size, count, fp);,其中:buffer 数据存储的起始地址,size 要读写的字节数,count 读写的数据项,fp 文件指针变量,返回值:count的值。,注意:使用fread( )、fwrite来读写文件时,文件必须以二进制的方式打开。,10.2.3 按“记录” 的方式读写,10.2.4 随机存取文件,问题:要求打开文件后,对指定位置上的数据进行读写操作,减少一些不必要的中间环节。,解决的办法:把文件指针移到指定的位置即可。,关键步骤:文件的定位。,?,一、文件定位函数,fseek(文件指针变量 , 位移量 , 起始点),注 (1) 起始点的取值只有3种:,(2) 位移量:以起始点为基点移动的字节数,0 文件开始处,1 文件位置指针的当前位置,2 文件尾,(3) 位移量应为long型,(4) fseek( )的返回值:,0 成功,非零 失败,例:fseek(fp, 20l, 0);,将位置指针移到离文件头20个字节处,fseek(fp, 10l, 1);,将位置指针移到离文件尾30个字节处,fseek(fp, 30l, 2);,将位置从当前位置向后移10个字节,注意: 此处的20l是20和字母l,二、位置函数,ftell(文件指针变量);,作用:返回文件指针的当前指向位置,返回值:,0, 文件指针的当前指向,1, 出错,例: 文件data1.txt的内容如下:,this is a test.,c语言程序设计,随机读写函数测试。,要求编写一程序随机读出指定的记录。,三、重新定位函数,rewind( 文件指针变量 ),作用:使文件指针返回到文件的开头,无返回值.,#include #include main( ) file *fp; int loc1, loc2; long d=8l; char w; fp=fopen(“data1.txt“, “r“); if (fp= =null) printf(“errorn“); else loc1=fseek(fp, d, 0); if (loc1= =0) w=fgetc(fp); printf(“w=%cn“
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年南平延拓文旅集团幼儿园保育员招聘若干人笔试参考题库附答案解析
- 2025云南省投资控股集团有限公司集中招聘98人考试模拟试题及答案解析
- 2025福建泉州市晋江市首峰中学招聘笔试参考题库附答案解析
- 2025浙江宁波象山县商贸集团有限公司第三期招聘工作人员2人笔试参考题库附答案解析
- 2025浙江杭州上城资本私募基金管理有限公司招聘1人考试模拟试题及答案解析
- 2025年甘肃省平凉市静宁县西岭幼儿园教育集团总园招聘考试参考题库附答案解析
- 若尔盖县2025年医疗卫生辅助岗招募(6人)考试备考题库及答案解析
- 2025云南省怒江州福贡县人民检察院招聘合同制辅助人员(2人)考试备考试题及答案解析
- 四川交通职业技术学院2025年7月编制外工作人员招聘(5人)笔试参考题库附答案解析
- 2025山东大学教师外其他专业技术岗位招聘11人(三)考试备考试题及答案解析
- 制造业班组长培训
- 研发项目策划书
- 创作属于自己的国画作品
- 烟草行业基础知识培训课件
- 《花生膜下滴灌技术》课件
- 2024年江苏高科技投资集团有限公司招聘笔试参考题库含答案解析
- 办公室文员员工职责
- 完整版江苏省政府采购专家库入库考试题库(1-4套卷)
- 飞机基础知识-飞机机型分类
- 样品不合格分析及改良流程图
- 小学三年级上册《健康成长》全册教案教学设计
评论
0/150
提交评论