版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c c语语言言程程序序设设计计c c语语言言程程序序设设计计第第16章章 文文 件件c c语语言言程程序序设设计计c c语语言言程程序序设设计计学习目标学习目标(1)理解文件的概念、操作种类和读写的基本原理。)理解文件的概念、操作种类和读写的基本原理。(2)理解)理解C语言中流的概念,掌握文件打开模式。语言中流的概念,掌握文件打开模式。(3)理解顺序文件的概念,能使用标准库函数)理解顺序文件的概念,能使用标准库函数fprintf和和 fputc建立顺序文件,掌握顺序文件的读(使用建立顺序文件,掌握顺序文件的读(使用fscanf 和和fgetc)、写(使用)、写(使用fprintf和和fputc
2、)和修改(使用临)和修改(使用临 时文件)操作。时文件)操作。(4)理解随机文件的概念)理解随机文件的概念,能使用标准库函数能使用标准库函数fwrite建立随建立随 机文件机文件,掌握随机文件的读掌握随机文件的读(使用使用fseek和和fread)、写、写( 使用使用fseek和和fwrite)、修改和删除操作。、修改和删除操作。c c语语言言程程序序设设计计c c语语言言程程序序设设计计 所谓所谓文件文件-存储在存储在外部介质外部介质上的数据的集合。上的数据的集合。 C语言把文件看作是一个字符语言把文件看作是一个字符(字节字节)的序列,即由一个一个的序列,即由一个一个字符字符(字节字节) 的
3、数据顺序组成。的数据顺序组成。 C语言中的文件存储方式分为语言中的文件存储方式分为 :ASCII文件和二进制文件。文件和二进制文件。ASCII文件文件(文本文件文本文件) : 每个字节存放一个每个字节存放一个ASCII代码代码,代表一个代表一个字符。字符。二进制文件二进制文件 : 把内存中的数据按其在内存中的存储形式原样输把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。出到磁盘上存放。16.1 C 文件概述文件概述c c语语言言程程序序设设计计c c语语言言程程序序设设计计 操作系统是以操作系统是以文件为单位文件为单位对数据进行管理。对数据进行管理。以前各章中使用的输入输出以前各章中
4、使用的输入输出,都是以都是以终端终端为对象的为对象的,即从终端输入数据,运行结果输出到终端上。即从终端输入数据,运行结果输出到终端上。从操作系统的角度看从操作系统的角度看,每一个与主机相连的输入输出每一个与主机相连的输入输出设备都看是一个文件。设备都看是一个文件。例如:例如:终端键盘为输入文件终端键盘为输入文件,显示器和打印机为输出文件。显示器和打印机为输出文件。c c语语言言程程序序设设计计c c语语言言程程序序设设计计例如例如 :整数:整数 1000000100111 0001000000110001 00110000 00110000 00110000 0011000000100111
5、00010000二进制二进制存储形式(存储形式(2个字节)个字节)ASCII内存内存存储形式存储形式ASCII文件便于字符处理和输出文件便于字符处理和输出,,二进制文件节省,二进制文件节省存储空间。存储空间。1 0 0 0 0其中:其中: 0 -ASCII码为码为 48 1 -ASCII码为码为 49存储形式(存储形式(5个字节)个字节)二进制数二进制数c c语语言言程程序序设设计计c c语语言言程程序序设设计计2. C语言中对文件的存取是语言中对文件的存取是以字符以字符(字节字节)为单位为单位的的 输入输出输入输出数据流数据流仅受程序控制,不受物理符号仅受程序控制,不受物理符号控制(如回车换
6、行符)控制(如回车换行符) 称这样的文件为称这样的文件为流文件。流文件。说明:说明: 1. 一个文件是一个一个文件是一个字符流字符流或或二进制流。二进制流。c c语语言言程程序序设设计计c c语语言言程程序序设设计计 每个被使用的文件都在内存中开辟一个区,每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如:用来存放文件的有关信息(如:文件的名字,文文件的名字,文件状态与文件当前位置等件状态与文件当前位置等)。这些信息保存在一)。这些信息保存在一个结构体类型的变量中。个结构体类型的变量中。 结构体类型是由系统定义的,名为结构体类型是由系统定义的,名为 FILE 的类的类型。型。 s
7、tdio.h 文件中有以下定义:文件中有以下定义:16 . 2 文件类型指针文件类型指针c c语语言言程程序序设设计计c c语语言言程程序序设设计计typedef struct char level ; /* 缓冲区缓冲区满满或或空空 */unsigned flags ; /* 文件状态标志文件状态标志 */char fd ; /* 文件描述字(文件号)文件描述字(文件号) */unsigned char hold ;char bsize ;/* 缓冲区大小缓冲区大小 */unsigned char *buffer ; /* 缓冲区位置缓冲区位置 */unsigned char *curp ;
8、 /* 下一个字符的位置下一个字符的位置 */unsigned istemp ;char token ;FILE ;c c语语言言程程序序设设计计c c语语言言程程序序设设计计 例如例如: FILE *fp; 表示定义了一个表示定义了一个指向指向FILE类型结构体的指针变量类型结构体的指针变量 fp, 可以使可以使 fp指向某个文件的结构体变量指向某个文件的结构体变量 , 从而从而通过通过该结构体变量中的文件信息来访问该文件该结构体变量中的文件信息来访问该文件 (也就是通也就是通过文件指针变量能够找到与它相关的文件过文件指针变量能够找到与它相关的文件)。 有了有了FILE类型之后,就可以用它来
9、类型之后,就可以用它来定义定义FILE类型类型的变量,数组或指针变量。的变量,数组或指针变量。c c语语言言程程序序设设计计c c语语言言程程序序设设计计C语言中用语言中用 fopen( ) 函数来实现打开文件函数来实现打开文件, fopen函数函数的调用方法的调用方法 : FILE *fp; fp=fopen(文件名,使用文件方式文件名,使用文件方式) ;例如例如: (1)文件名为文件名为 A1 , 是字符串,称为是字符串,称为外部文件名。外部文件名。 (2)使用方式为使用方式为 : 只读只读方式方式 (3)fopen函数带回指向文件函数带回指向文件A1的指针,并赋给的指针,并赋给 fp,
10、使得使得 fp指向指向A1。 fp 称为称为内部文件名内部文件名。 fp=fopen(A1,r);16.3 文件操作函数文件操作函数16.3.1 文件的打开和关闭函数文件的打开和关闭函数 1. fopen函数函数 通过通过 fopen( ) 使内部文件名使内部文件名fp和外部文件名和外部文件名A1联系上。联系上。c c语语言言程程序序设设计计c c语语言言程程序序设设计计如果如果 fopen 函数打开文件失败函数打开文件失败,则返回一个空指针值则返回一个空指针值 NULLif ( fp=fopen(A1,r) = = NULL ) printf(打开文件失败打开文件失败); exit(0) ;
11、注意注意程序中应作以下判断:程序中应作以下判断:程序出口程序出口c c语语言言程程序序设设计计c c语语言言程程序序设设计计文件主要使用方式文件主要使用方式: r 只读方式,为输入打开已存在的文本文件。只读方式,为输入打开已存在的文本文件。 w 只写方式只写方式 ,为输出创建新文件为输出创建新文件, (若文件已存在,则文件内容被若文件已存在,则文件内容被清空)。清空)。 a 追加数据方式追加数据方式, 只用于向已存在的文件的末尾添加数据。只用于向已存在的文件的末尾添加数据。 rb 为输入打开一个已存在的二进制文件。为输入打开一个已存在的二进制文件。wb 为输出打开一个二进制文件。若文件不存在为
12、输出打开一个二进制文件。若文件不存在 , 则创建新文件则创建新文件 ab 为追加数据打开一个已存在的二进制文件为追加数据打开一个已存在的二进制文件. r+ 为读为读/写方式只能打开一个已存在的文本文件。写方式只能打开一个已存在的文本文件。 w+ 为读为读/写方式,建立一个新文件(若文件已存在,则文件内容写方式,建立一个新文件(若文件已存在,则文件内容被清空)。被清空)。a+ 为读为读/写方式写方式,保留已存在的文件保留已存在的文件,可以添加数据可以添加数据, 也可以读取数据也可以读取数据 rb+ 为读为读/写方式打开一个已存在的二进制文件。写方式打开一个已存在的二进制文件。 wb+ 为读为读/
13、写方式写方式,建立一个新的二进制文件建立一个新的二进制文件,若文件已存在若文件已存在,则文件则文件内容被清空内容被清空 ab+ 为读为读/写方式,写方式, 保留已存在的文件保留已存在的文件,可以添加数据可以添加数据, 也可以读取也可以读取数据数据c c语语言言程程序序设设计计c c语语言言程程序序设设计计在用户登录时,系统自动打开在用户登录时,系统自动打开 3 个标准文件:个标准文件:stdin : 标准输入文件,指向终端输入标准输入文件,指向终端输入(例如,键盘输例如,键盘输 入入)。stdout : 标准输出文件,指向终端输出标准输出文件,指向终端输出 (例如例如, 显示器显示器 和打印机
14、和打印机)。stderr : 标准出错文件,指向终端输出标准出错文件,指向终端输出(例如,显示例如,显示 器器)。c c语语言言程程序序设设计计c c语语言言程程序序设设计计 关闭文件关闭文件-使文件指针不再指向该文件,也就是使使文件指针不再指向该文件,也就是使文件指针变量与文件文件指针变量与文件脱钩。脱钩。 C语言中用语言中用 fclose( ) 函数来关闭文件,函数来关闭文件,fclose函数的函数的调用形式调用形式 : fclose (文件指针文件指针) ; 例如例如 : fclose(fp) ; 关闭关闭 fp所指的文件。所指的文件。2. 文件的关闭文件的关闭( fclose函数函数
15、)如果如果fclose函数关闭文件成功,则返回函数关闭文件成功,则返回零值零值 ;如果如果fclose函数关闭文件失败,则返回函数关闭文件失败,则返回非零值非零值 EOF( -1). EOF为为文件结束符。文件结束符。c c语语言言程程序序设设计计c c语语言言程程序序设设计计 用户应该养成在程序结束以前用户应该养成在程序结束以前关闭所有文件的习惯关闭所有文件的习惯, 如果不关闭文件将会丢失数据。如果不关闭文件将会丢失数据。 fclose函数函数在程序结束以前先把文件缓冲区中的数据在程序结束以前先把文件缓冲区中的数据 输出到磁盘文件输出到磁盘文件, 然后才释放文件指针变量。然后才释放文件指针变
16、量。注意注意c c语语言言程程序序设设计计c c语语言言程程序序设设计计(1). fputc函数把函数把一个字符一个字符写到磁盘文件上去。写到磁盘文件上去。 定义定义 : int fputc( ch , fp) char ch ; FILE * fp ;16.3.2 文件的读写文件的读写文件打开之后就可以进行读写,读写函数如下文件打开之后就可以进行读写,读写函数如下 :1. 字符输入输出函数字符输入输出函数c c语语言言程程序序设设计计c c语语言言程程序序设设计计 把把 ch 字符变量中的字符输出到字符变量中的字符输出到 fp所指向的文件中去。所指向的文件中去。 如果输出成功如果输出成功 ,
17、 则返回则返回 ch , 否则否则 , 返回返回 EOF (即即 -1)。 在在 stdio.h中有如下定义中有如下定义 : #define putchar( c ) fputc(c , stdout) 所以所以 putchar( ) 实际是实际是宏指令。宏指令。调用方式为调用方式为 : fputc(ch , fp); c c语语言言程程序序设设计计c c语语言言程程序序设设计计(2). fgetc 函数从指定的文件读入一个字符。函数从指定的文件读入一个字符。 该文件必须是以该文件必须是以“读读”或或“读写读写”方式打开方式打开, 定义定义 : int fgetc(fp) FILE *fp ;
18、 调用方式为调用方式为 : ch = fgetc(fp); fgetc函数从函数从 fp 所指定文件的当前位置读入一个字符赋给所指定文件的当前位置读入一个字符赋给 ch ;同时同时,文件的当前位置加文件的当前位置加 1,如果读入时遇到,如果读入时遇到文件结束符文件结束符,则返回则返回EOF (即即 -1)。c c语语言言程程序序设设计计c c语语言言程程序序设设计计fgetc( )在在stdio.h中有如下定义中有如下定义 :#define getchar( ) fgetc( stdin )所以所以 getchar( ) 实际也是实际也是宏指令,宏指令,因此在文件头上因此在文件头上必须加必须加
19、: #include c c语语言言程程序序设设计计c c语语言言程程序序设设计计.ch = fgetc ( fp) ;while(ch !=EOF) putchar( ch ) ; ch = fgetc ( fp ) ; .EOF 定义为定义为 -1,为文件结束符,为文件结束符只适用于文本文件只适用于文本文件例如例如 : 顺序读入一个顺序读入一个文本文件文本文件中的字符显示在屏幕上。中的字符显示在屏幕上。EOF 是在是在 stdio.h中中 定义的定义的符号常量符号常量,值为,值为 -1。c c语语言言程程序序设设计计c c语语言言程程序序设设计计while( ! feof(fp) c=fg
20、etc(fp) ; putchar ( c ) ; . 但对于但对于二进制文件二进制文件,某个字节中的数有可能是,某个字节中的数有可能是 -1,因此难于用因此难于用EOF判断结束,这时可以用函数判断结束,这时可以用函数 feof( fp)来测试来测试 fp所指的文件当前是否所指的文件当前是否“文件结束文件结束”,是则返是则返回回 1。不是则返回。不是则返回 0 ;feof( )也适用于文本文件也适用于文本文件c c语语言言程程序序设设计计c c语语言言程程序序设设计计(3). fputs ( )函数把函数把一个字符串一个字符串写到磁盘文件上去。写到磁盘文件上去。 定义定义 : int fput
21、s( str , fp) char *str ; FILE *fp ; 调用方式为调用方式为 : fputs (str , fp) ;字符串结束符不写入文件。字符串结束符不写入文件。如果输出成功如果输出成功 , 则返回则返回 0 , 否则否则 , 返回返回 EOF (即即 -1)。注意注意c c语语言言程程序序设设计计c c语语言言程程序序设设计计(4). fgets ( )函数从指定的文件读入函数从指定的文件读入一个字符串。一个字符串。 定义定义 : char *fgets( str , n , fp) char str ; int n ; FILE *fp ; 从从 fp指定的文件读入一个
22、最大长度为指定的文件读入一个最大长度为 n-1的字符串存入数组的字符串存入数组 str,并在数组并在数组str中中加加 0 作为字符串结束符。作为字符串结束符。调用方式为调用方式为 : fgets ( str , n , fp) ; 如果输出成功如果输出成功 , 则返回则返回 str , 否则否则 , 返回返回 NULL。c c语语言言程程序序设设计计c c语语言言程程序序设设计计#include void main( ) FILE *fp; char ch , filename10 ; printf(”Input file name :) ; scanf(%s, filename) ; if
23、( (fp=fopen(filename,w) =NULL ) printf(”Cannot open file n) ; exit(0) ; ch=getchar( ) ; while(ch != #) fputc(ch , fp) ; putchar(ch) ; ch=getchar( ) ; fclose(fp); 将键盘输入的一些字符存入磁盘文件将键盘输入的一些字符存入磁盘文件, 直到输入一个直到输入一个#为止为止清除缓冲区清除缓冲区,关闭文件关闭文件,结束程序结束程序将字符写入文件将字符写入文件将字符输出到终端将字符输出到终端exit( ) 是出口函数。是出口函数。存放创建的新文件名
24、存放创建的新文件名例例16.1c c语语言言程程序序设设计计c c语语言言程程序序设设计计 #include main ()FILE *p; char ch,fname10;printf(ninput filename: );gets(fname);fp=fopen(fname, w);printf(nEnter data:n);while(ch=getchar( ) !=#) fputc(ch,fp );fclose(fp);c c语语言言程程序序设设计计c c语语言言程程序序设设计计c c语语言言程程序序设设计计c c语语言言程程序序设设计计运行情况如下运行情况如下 :Input file
25、 name : file1 (输入磁盘文件名)输入磁盘文件名)computer and c # (输入一个字符串写到(输入一个字符串写到磁盘文件磁盘文件 file1中中去去)computer and c ( 显示一个字符串)显示一个字符串)最后说明一点,为了书写方便,系统在最后说明一点,为了书写方便,系统在 stdio.h把把 fputc 和和 fgetc定义为宏名定义为宏名putc 和和 getc :#define putc(ch , fp) fputc(ch , fp)#define getc(fp) fgetc(fp)c c语语言言程程序序设设计计c c语语言言程程序序设设计计#incl
26、ude void main( ) FILE *in , *out ; char ch , infile10 , outfile10 ; printf(Enter the infile name :n) ; scanf(%s , infile) ; printf(Enter the outfile name :n) ; scanf(%s , outfile) ; if(in = fopen(infile , rb) =NULL) printf(cannt open infilen) ; exit(0) ; if(out = fopen(outfile , wb) = NULL) printf(c
27、annt open outfilen) ; exit(0) ; while( ! feof(in) ch=fgetc(in) ; fputc(ch , out) ; fclose(in) ; fclose(out) ;运行情况如下运行情况如下 :Enter the infile name :file1 Enter the outfile name :file2 准备工作准备工作打开文件打开文件复制复制 将一个二进制磁盘文件的信息复制到另一个磁盘文件中。将一个二进制磁盘文件的信息复制到另一个磁盘文件中。例例16.2c c语语言言程程序序设设计计c c语语言言程程序序设设计计 fgetc函数和函数和 fputc函数用来读写文件中的一个字符。函数用来读写文件中的一个字符。 当要求一次当要求一次读写一个数据块读写一个数据块时,可以用时,可以用 fread函数和函数和 fwrite 函数函数 定义形式定义形式 : int fread( buffer , size , count , fp) ; int fwrite( buffer , size , count , fp) ; 其中其中 : buffer 是指针,数组的入口地址。是指针,数组的入口地址。 char buffer : 1. 对于对于fread , 把从把从 f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 修补街道施工方案(3篇)
- 打卡活动折纸方案策划(3篇)
- 公司糕点活动策划方案(3篇)
- 体操特色活动方案策划(3篇)
- 凉亭庭院施工方案(3篇)
- 2025年金融服务产品销售与服务规范
- 中学学生社团活动经费保障制度
- 2025年中职应急管理(应急处置基础)试题及答案
- 2025年大学心理学(咨询心理学)试题及答案
- 2025年大学大四(物流工程与管理)物流园区规划设计综合试题及答案
- 社工专业知识培训活动课件
- 四川省成都市树德实验中学2026届数学八上期末联考试题含解析
- 收购发票培训课件
- 鞋厂与总代商的合作方案
- 2025年贸易经济专业题库- 贸易教育的现状和发展趋势
- 核子仪考试题及答案
- DB46-T 481-2019 海南省公共机构能耗定额标准
- 劳动合同【2026版-新规】
- 电子元器件入厂质量检验规范标准
- 中药炮制的目的及对药物的影响
- 688高考高频词拓展+默写检测- 高三英语
评论
0/150
提交评论