版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十二章 文件,内容提要 文件 缓冲型文件的打开、关闭与读写 文件I/O,文件:就是存储在外部存储介质上的数据的有序集合;存储在磁介质上的文件即使在断电之后,依然能够保存。 C语言的源文件存储为*.c文件,经过编译后得到的目标文件存储为*.obj,生成的可执行文件,存储为*.exe文件。 C的文件分为两大类,普通文件和设备文件。C对文件的存取是以字符为单位的。,普通文件保存在外部磁介质上,而把各种外设看成是设备文件。 对显示器的输出看成是对设备文件进行写操作 键盘的输入看成是设备文件的读操作 显示器是标准输出文件,键盘是标准输入文件,磁介质存储文件 文件存储在磁介质上,有的按照ASCII码存储
2、,有的按照二进制编码存储 ASCII码文件 按照ASCII码进行存储,这种文件能够被人所看懂。ASCII码保存的文件被称为文本文件。 如: A保存为65 a保存为97 1保存为49 二进制文件 以内存中的二进制编码保存。这些文件人是没办法读懂的,ASCII码文件 如果用ASCII码来保存的话,需要将2009看成占4个字节的字符串。 2对应的ASCII码为50二进制表达为00110010 0对应的ASCII码为48二进制表达为00110000 0对应的ASCII码为48二进制表达为00110000 9对应的ASCII码为57二进制表达为00111001 二进制文件 2009如果用二进制文件保存的
3、话,首先要将2009这个数字转换为二进制数:00000111 11011001 占两个字节,不足部分补0。,从普通文件读数据时,从磁盘文件中读一批数据到划分出的缓冲区中,然后从缓冲区将数据逐个送入相对应的变量中; 向文件写数据时,是先将变量中数据送到缓冲区,在缓冲区满后,将缓冲区内的数据一起存到普通磁盘文件中。,文件类型指针 用一个指针变量指向一个文件,通过对文件指针的操作,来对这个指针所指向的文件进行操作。 文件指针声明的一般形式为: FILE *指针变量名; FILE为系统定义的一个结构体,包含文件的各种信息。如:文件名,文件当前位置,文件状态,缓冲区大小等等 FILE是包含在中,FILE
4、的定义为: typedef struct short level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ short bsize; /* Buffer size */ unsigned char *buffer; /* Data transfer buffer */ unsigned char *curp; /* Curren
5、t active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ FILE;,FILE类型的指针变量声明为: FILE *fp; fp为指针变量,按照结构体中的成员变量所提供的信息,就可以找到文件,对文件进行操作。 不必弄清楚FILE的每一个细节,只用声明一个指针变量,指向这内存中划出的FILE结构体变量空间的首地址就可以了,标准文件 标准文件是特殊的设备文件,显示器、键盘和错误输出文件。这些标准文件指针是C定义的,并由C自动打开和关
6、闭。 这三个标准文件分别是: 标准输入文件,指针为stdin:键盘。 标准输出文件,指针为stdout:显示器。 标准错误输出文件,指针为stderr:输出错误信息,操作文件的步骤: 打开文件 使用(包括读或写) 关闭文件,打开文件 实际上就是让文件指针指向一个内存区域,文件的各种信息被调入并 存放在这个内存区域中。 fopen()函数,文件打开函数,用来以一个特定的打开方式来打开一个文件,一般形式为: FILE *fp; fp = fopen(文件名,文件打开方式); fp为文件指针,这个指针指向FILE结构体变量的首地址。 文件名为被打开文件的名字;在名字之前,可以加上路径;文件名,可以是
7、字符数组或者字符串常量。 文件打开方式,则是要如何操作文件。,打开方式: 由r(read),w(write),a(append),t(text),b(binary),+,组合而成 对文本文件(text)的基本操作:rt(只读文本文件)、wt(只写文本文件)、at(追加文本文件) 对二进制文件(binary)的基本操作: rb(只读二进制文件)、wb(只写二进制文件)、ab(追加二进制文件) 书写的时候对表达文本文件的t可以省略 r表达的是只读方式,以只读方式将文件打开,将文件信息调入内存;若文件打开不成功,则返回NULL。 w表达的是只写方式,以只写方式将文本文件打开。若文件不存在,则在磁盘上
8、相应的位置新建一个文件;若文件已存在,则去除掉原来该文件中所有信息,重新往该文件中写入缓冲区信息 a表达的是追加方式,以只写方式将文本文件打开。若文件不存在,则返回空值NULL;若文件已存在,在原来的文件数据后,写入缓冲区信息。 +的意思是读和写都允许。+经常与这6种方式一起,如:rt+,rb+,w+,等,关闭文件 关闭文件是指的断开指针与文件之间的联系,释放文件缓冲区 fclose()函数,文件关闭函数,当文件调用结束后,要使用fclose()函数把文件关闭。 一般形式为: fclose(fp); fp为文件指针,这个指针指向FILE结构体变量的首地址。 正常关闭的时候将返回0值,而发生错误
9、的时候返回非0。,fgetc() 函数: fgetc()从文件中读取一个字符 若操作成功,则返回读入的字符,若操作不成功,或者文件结束,则返回EOF。 一般使用方式: char ch; FILE *fp; 文件以只读或者读写打开之后, ch = fgetc(fp); 将fp指针指向的那个文件中的一个字符读出来,赋值给ch,从一个已知的文件中读入所有的字符,打印显示到屏幕上 #include void main( ) FILE *fp; char c; char file 30; printf(input directory and file: ); gets(file); if (fp = f
10、open(file,r) = NULL) printf(open error on readingn , file); exit(0); while (c = fgetc(fp)!= EOF) putchar(c); fclose(fp); ,fputc() 函数:往文本文件中写入一个字符 若操作成功,则返回写入的字符,若操作不成功,则返回EOF 。 一般使用方式: fputc(字符,文件指针); 将字符写入到文件指针所指的那个文件中去 文件必须以只写或者读写或者追加方式打开 使用w方式,文件内部指针会从文件头开始,重新写入, 使用a方式,则是从已存在的文件尾部,继续写入。,键盘输入字符串,将
11、字符串记录到指定文本文件中,最后在屏幕上打印出这个文本文件中的内容字符串以回车结束,#include void main( ) FILE *fp; char c; char file30; printf(input directory and file: ); gets(file); if (fp = fopen(file,w) = NULL) printf(open error on writing inn); exit(0); ,while (c = getchar( ) != n) fputc(c, fp); fclose(fp); if (fp = fopen(file,r) = NU
12、LL) printf(open error on readingn); exit(0); while (c = fgetc(fp) != EOF) putchar(c); fclose(fp); ,fread() 函数与fwrite()函数: fread与fwrite是用来整块的读写数据的。,fread() 函数 fread的一般形式为: fread(buffer, size, n, fp); 若操作成功,从fp所指向的文件中,读取n个数据项,存放到buffer指针所指向的内存区域,并且返回读出的数据项个数 若文件结束或操作失败,则返回0,fwrite() 函数 fwrite的一般形式为: f
13、write(buffer, size, n, fp); 若操作成功,则将buffer指针所指向的内存区域中的n个数据项,写入fp所指向的文件中, 若操作失败,则返回0,在EMPLOYEE职工信息系统中,输入数据,保存到文件中去,并且从文件中读出数据,#include void main() struct employee int EId; char name20; char tel10; float salary; *pemp, *p; FILE *fp1, fp2; float temp; if(fp1=fopen(c:tcexample.txt,w+) = NULL) ,printf(op
14、en error on writing in); exit(0); printf(input EId:); scanf(%d,fwrite(pemp,sizeof(struct employee),1,fp1); fclose(fp1); if(fp2=fopen(c:tcexample.txt,r+) = NULL) printf(open error on reading); exit(0); fread(p, sizeof(struct employee), 1, fp2); printf(new employees detail:n); printf(Eidtnamettelttsal
15、aryn); printf(%dt%st%st%.2fn,p-EId,p-name,p-tel,p-salary); fclose(fp2); ,fprintf函数与fscanf函数 fprintf函数与fscanf函数实际上与printf,scanf很相似 不同的是scanf与printf是从键盘和屏幕进行读写,而fscanf,fprintf则是对普通文件进行操作。 scanf和fprintf的格式字符控制符,与scanf,printf的格式控制符相同。,fprintf函数 fprintf的一般使用形式: fprintf(文件指针,格式控制符,输入表); 若操作成功,则将输出项按照制定格式写
16、入文件指针所指向的文件中,并且返回写入的字节数。 若操作不成功,则返回EOF,fscanf函数 fscanf的一般使用形势: fscanf(文件指针,格式控制符,输入表); 若操作成功,则从文件指针所指向的文件中读取数据,送到指定的内存地址中,并且返回实际读出的数据项个数,若没有读取数据项则返回0。 若操作不成功,或者文件结束,则返回EOF。,在EMPLOYEE职工信息系统中,输入数据,保存到文件中去,并且从文件中读出数据(使用fscanf和fprintf)。,#include void main() struct employee int EId; char name20; char tel
17、10; float salary; *pemp, *p; FILE *fp1, fp2; float temp;,if(fp1=fopen(c:tcexample.txt,w+) = NULL) printf(open error on writing in); exit(0); printf(input EId:); scanf(%d,fprintf(fp1,%dt%st%st%.2fn,pemp - EId, pemp - name, pemp - tel, pemp- salary); fclose(fp1); if(fp2=fopen(c:tcexample.txt,r+) = NUL
18、L) printf(open error on reading); exit(0); fscanf(fp2,%d%s%s%f,p-EId, p-name, p-tel, ,fgets()与fputs()函数 fgets与fputs处理字符串往文件中的读写问题。 fgets函数是用来从制定的文件中读取字符串到内存中的 fputs函数时用来向文件写入字符串的,fgets函数 其调用的一般形式为: fgets(字符串首地址,n,文件指针); 若操作成功,就可以从文件中读取文件里的字符串至多n-1个字符,加上一个0放入到内存中的字符数组,返回字符数组的首地址。 若操作失败,则返回0值。,从文件中读取8个字符的字符串,并打印出来。,#include void main() FILE *fp; char *string = ; if(fp=fopen(c:tcexample.txt, r+) = NULL) printf(open error on reading); exit(0); fgets(string, 9, fp); printf(%sn, string); fclose(fp); ,fp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 子宫内膜异位症综合管理流程
- 日照健康宣教中心介绍
- 2026届四川省威远县中考冲刺卷生物试题含解析
- 桂林市文化史专题一、二教学中教师问题剖析与对策探寻
- 格力电器股权激励对公司绩效的影响:机制、成效与启示
- 2026届河南省襄城县春联考中考押题数学预测卷含解析
- 2026届浙江省杭州市临安区、富阳区重点名校中考数学模拟试题含解析
- 黑龙江省七台河市勃利县达标名校2026届中考一模数学试题含解析
- 浙江省嘉兴市海宁市2026届中考生物考前最后一卷含解析
- 核态池沸腾中多气泡行为特性与传热过程的数值模拟与机理探究
- 2025电梯安装单位电梯安装质量安全风险日管控、周排查、月调度管理制度
- 悲惨世界名著解读
- 2025高中历史时间轴完整版记忆手册
- 临时施工占道施工方案
- 《煤矿安全规程》2025版
- 2025广东深圳市罗山科技园开发运营服务有限公司高校应届毕业生招聘笔试参考题库附带答案详解
- 手持风扇质量检验及标准说明
- 血站清洁消毒培训课件
- 药物性剥脱性皮炎
- DB32∕T 4341-2022 水下道路隧道消防系统工程施工质量验收规范
- 对口支援新疆管理办法
评论
0/150
提交评论