C语言程序设计-第13章 文件
更新时间:2023-08-13 14:48:01 阅读量: IT计算机 文档下载
湖南工学院C语言程序设计,陈香兰教授指导。
第13章
文 件
所谓“文件”一般指存储在外部介质的数据的集合。在 程序运行时,程序本身和数据一般都存放在内存中。当程序 运行结束后,存放在内存中的数据被释放。 如果需要长期保存程序运行所需的原始数据,或程序运 行产生的结果,就必须以文件形式存储到外部存储介质上。
13.1 13.2 13.3 13.4 13.5
C语言文件概述 文件的类型指针 文件的打开与关闭 文件的读写 文件的定位
湖南工学院C语言程序设计,陈香兰教授指导。
13.1 C语言文件概述1.文件与文件名 文件是指存放在外部存储介质上的数据集合。 为标识一个文件,每个文件都必须有一个文件名, 其一般结构为: 主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文件, 程序文件又可分为源文件、目标文件和可执行文件。 (2)根据文件的组织形式,可分为顺序存取文件和随 机存取文件。
湖南工学院C语言程序设计,陈香兰教授指导。
(3)根据文件的存储形式,可分为 ASCII码文件和二进制文件。 ASCII码文件的每1个字节存储1个字 符,因而便于对字符进行逐个处理。但一 般占用存储空间较多,而且要花费转换时 间(二进制与ASCII码之间的转换)。 二进制文件是把内存中的数据,原样输 出到磁盘文件中。可以节省存储空间和转 换时间,但1个字节并不对应1个字符,不 能直接输出字符形式。
湖南工学院C语言程序设计,陈香兰教授指导。
3.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送 到计算机内存的操作。 所谓写文件是指,从计算机内存向磁盘文件 中传送数据的操作。 4.构成文件的基本单元与流式文件 C语言将文件看作是由一个一个的字符 (ASCII码文件)或字节(二进制文件)组成的。 将这种文件称为流式文件。 而在其它高级语言中,组成文件的基本单位 是记录,对文件操作的基本单位也是记录。
湖南工学院C语言程序设计,陈香兰教授指导。
13.2
文件类型指针
系统给每个打开的文件都在内存中开辟一个区 域,用于存放文件的有关信息(如文件名、文件位 置等)。这些信息保存在一个结构类型变量中,该 结构类型由系统定义、取名为FILE。 注意:结构类型名“FILE”必须大写。 文件型指针变量的定义: FILE *fp; fp是一个指向FILE类型结构体的指针变量。可以 使fp指向某一个文件的结构体变量,从而通过该结 构体变量中的文件信息能够访问该文件。 。
湖南工学院C语言程序设计,陈香兰教授指导。
13.3
文件的打开与关闭
对文件进行操作之前,必须先打开该文件;使用结 束后,应立即关闭,以免数据丢失。 C语言规定了标准输入输出函数库,用fopen()函 数打开一个文件,用fclose()函数关闭一个文件。 13.3.1 文件的打开──fopen()函数 1.用法: FILE *fopen("文件
名","操作方式"); 2.功能:返回一个指向指定文件的指针。 3.函数原型:stdio.h 。 注:对文件操作的库函数,函数原型均在头文件 stdio.h中。后续函数不再赘述。
湖南工学院C语言程序设计,陈香兰教授指导。
(1)“文件名”是指要打开(或创建)的文件名。如 果使用字符数组(或字符指针),则不使用双引号。 (2)“操作方式”如表12-1所示。 例如,FILE *fp; fp=fopen("data.99","r"); 3.说明 (1)如果不能实现打开指定文件的操作,则fopen()函 数返回一个空指针NULL (其值在头文件stdio.h中被定义 为0)。 为增强程序的可靠性,常用下面的方法打开一个文件: if((fp=fopen("文件名","操作方式"))==NULL) { printf("can not open this file\n"); exit(0); }
湖南工学院C语言程序设计,陈香兰教授指导。
●关于exit()函数 1)用法:void exit([程序状态值]); 2)功能:关闭已打开的所有文件,结束程序运 行,返回操作系统,并将“程序状态值”返回给操 作系统。当“程序状态值”为0时,表示程序正常 退出;非0值时,表示程序出错退出。 (2)“r(b)+”与“a(b)+”的区别:使用前 者打开文件时,读写位置指针指向文件头;使用后 者时,读写指针指向文件尾。(3)使用文本文件向计算机系统输入数据时, 系统自动将回车换行符转换成一个换行符;在输出 时,将换行符转换成回车和换行两个字符。
湖南工学院C语言程序设计,陈香兰教授指导。
使用二进制文件时,内存中的数据形式与数据文 件中的形式完全一样,就不再进行转换。 (4)有些C编译系统,可能并不完全提供上述对 文件的操作方式,或采用的表示符号不同,请注意所 使用系统的规定。 (5)在程序开始运行时,系统自动打开三个标准 文件,并分别定义了文件指针: 1)标准输入文件——stdin:指向终端输入(一 般为键盘)。如果程序中指定要从stdin所指的文件输 入数据,就是从终端键盘上输入数据。
湖南工学院C语言程序设计,陈香兰教授指导。
2)标准输出文件——stdout:指向终端输出 (一般为显示器)。 3)标准错误文件——stderr:指向终端标准 错误输出(一般为显示器)。13.3.2 文件的关闭──fcolse()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。 如果正常关闭了文件,则函数返回值为0;否则, 返回值为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/
湖南工学院C语言程序设计,陈香兰教授指导。
13.4
文件的读写操作
文件打开之后,就可以对它进行读与写的操作 了。 13.3.1 13.3.2 13.3.3 13.3.4 13.3.5 读/写文件中的一个字符 读/写一个字符串 读/写一个数据块 对文件进行格式化读/写 读/写函数的选用原则
湖南工学院C语言程序设计,陈香兰教授指导。
13.4.1 读/写文件中的一个字符1.将一个字符写到文件中──fputc()函数 [案例] 将键盘上输入的一个字符串(以“@”作为结束字 符),以ASCII码形式存储到一
个磁盘文件中。
#include “stdio.h” main() { FILE *fp; char ch,filen[20]; scanf(“%s”,filen); { printf("the number of arguments not correct\n\n"); printf(“Usage: 可执行文件名 filename \n”); }
湖南工学院C语言程序设计,陈香兰教授指导。
if((fp=fopen(filen[1],“w”))==NULL) { printf("can not open this file\n"); exit(0); /*w为只读(312页)*/ } /*输入字符,并存储到指定文件中*/ for( ; (ch=getchar()) != '@' ; ) fputc(ch,fp); /*输入字符并存储到文件中*/ fclose(fp); /*关闭文件*/ } [程序演示]将一个字符写到文件中──fputc()函数
程序运行情况: abcdefg1234567@←┘
湖南工学院C语言程序设计,陈香兰教授指导。
[案例13.1] 将键盘上输入的一个字符串(以“#”作为结束字 符),以ASCII码形式存储到一个磁盘文件中。 /*使用格式:可执行文件名 要创建的磁盘文件名*/ #include <stdio.h> main() (输入文件1后输入字符串) { FILE *fp; char ch,filen[10]; scanf(“%s”,filen); if((fp=fopen(filen,“w”))==NULL { printf("can not open this file\n"); exit(0);} ch=getchar(); /*接收最后输入的回车字符*/ ch=getchar(); /*接收输入的第一个字符*/ while(ch!= # ) {fputc(ch,fp);putchar(ch); ch=getchar();} fclose(fp); }
湖南工学院C语言程序设计,陈香兰教授指导。
1、函数 fputc(): 1)用法:int fputc(字符数据,文件指针); 其中“字符数据”,既可以是字符常量,也可以是字符 变量。 2)功能:将字符数据输出到“文件指针”所指向的文 件中去,同时将读写位置指针向前移动1个字节(即指向下 一个写入位置)。 如果输出成功,则函数返回值就是输出的字符数据;否 则,返回一个符号常量EOF(其值在头文件stdio.h中,被 定义为-1)。
湖南工学院C语言程序设计,陈香兰教授指导。
[例13.2] 将键盘上输入的字符串,存储到另一个磁盘文件中。(输入文件1和文件2)
#include <stdio.h> main() { FILE *in,*put; char ch,infilen[10],outl[10]; printf(“name:”); scanf(“%s”,infilen); scanf(“%s”,outl); if((in=fopen(infilen,“r”))==NULL) { printf("can open this file\n"); exit(0);} if((in=fopen(outl,“w”))==NULL) printf("not open this file\n"); exit(0);} while(!feof(in))fputc(fgetc(in),out); fclose(in); fclose(in); }
CCCC
湖南工学院C语言程序设计,陈香兰教授指导。
2.从文件中读入一个字符──fgetc()函数 [案例] 顺序显示创建的磁盘ASCII码文件。 /*参数:带参主函数,使用格式:可执行文件名 源文件名*/ #include "stdio.h" main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) /*参数个数不对*/ { printf("the number of arguments not correct\n"); printf(“\n Usage: 可执行文件名 源文件名"); exit(0); }
湖南工学院C语言程序设计,陈香兰教授指导。
if ((fp=fopen(argv[1],"r"))==NULL) { printf("can not open source file\n"); exit(0); } /*顺序输出文件的内容*/ for(; (ch=fgetc(fp))!=EOF; ) putchar(ch); /*顺序读入并显示*/ fclose(fp); /*关闭打开的文件*/ } 程序运行情况: abcdefg1234567
湖南工学院C语言程序设计,陈香兰教授指导。
(1)库函数fgetc() 1)用法:int fgetc(文件指针); 2)功能:从“文件指针”所指向的文件中,读入一 个字
符,同时将读写位置指针向前移动1个字节(即指 向下一个字符)。该函数无出错返回值。 例如,fgetc(fp)表达式,从文件fp中读一个字符,同 时将fp的读写位置指针向前移动到下一个字符。(2)关于符号常量EOF 在对ASCII码文件执行读入操作时,如果遇到文件 尾,则读操作函数返回一个文件结束标志EOF(其值在 头文件stdio.h中被定义为-1)。 在对二进制文件执行读入操作时,必须使用库函数 feof()来判断是否遇到文件尾。
湖南工学院C语言程序设计,陈香兰教授指导。
[案例] 实现制作ASCII码文件副本的功能。 /*程序功能:制作ASCII码文件的副本*/ /*使用格式:可执行文件名 源文件名 目标文件名*/ #include "stdio.h" main(int argc, char *argv[]) { FILE *input, *output; /* input:源文件指针, output:目标文件指针 */ char ch; if(argc!=3) /*参数个数不对*/ { printf("the number of arguments not correct\n"); printf("\n Usage: 可执行文件名 source-file dest-file"); exit(0); }
湖南工学院C语言程序设计,陈香兰教授指导。
if ((fp=fopen(argv[1],"r"))==NULL) /*打开源文件失败*/ { printf("can not open source file\n"); exit(0); } if ((fp=fopen(argv[2],"w"))==NULL) /*创建目标文件失败*/ { printf("can not create destination file\n"); exit(0); } /*复制源文件到目标文件中*/ for( ; (!feof(input)) ; ) fputc(fgetc(input),output); fclose(input); fclose(output); /*关闭源文件和目 标文件*/ }
正在阅读:
C语言程序设计-第13章 文件08-13
斗轮机重点部位安全施工方案02-02
关心男朋友的话语02-11
钢筋笼吊装施工方案05-03
弱电安防工程完整版竣工报验资料04-06
2016-2017年江西省抚州市崇仁二中高二第二学期期中物理试03-17
新人教版初中物理八年级下册月考 - 图文06-09
线段射线直线导学案10-14
学校生活饮用水卫生管理制度04-09
- 供应商绩效评价考核程序
- 美国加州水资源开发管理历史与现状的启示
- 供应商主数据最终用户培训教材
- 交通安全科普体验教室施工方案
- 井架安装顺序
- 会员积分制度
- 互联网对美容连锁企业的推动作用
- 互联网发展先驱聚首香港
- 公司文档管理规则
- 机电一体化系统设计基础作业、、、参考答案
- 如何选择BI可视化工具
- 互联网产品经理必备文档技巧
- 居家装修风水的布置_家庭风水布局详解
- 全省基础教育信息化应用与发展情况调查问卷
- 中国石油--计算机网络应用基础第三阶段在线作业
- 【知识管理专题系列之五十八】知识管理中如何实现“场景化协同”
- 网络推广方案
- 中国石油--计算机网络应用基础第二阶段在线作业
- 汽车检测与维修技术专业人才培养方案
- 详解胎儿颈透明层
- 程序设计
- 语言
- 文件
- 物料采购制度
- 铝合金热处理技术,铝合金使用范围,加工变形铝合金,铝合金知识
- 烟台德语培训烟台德语培训学校
- 现代服务业“营改增”实务培训
- 动物园企鹅馆解说词
- 海南椰都联合资信评估有限公司企业资信等级评估公告
- 4.4解直角三角形的应用第1课时
- 停临点、必监点设置表
- 基于DELPHI实现PC机与MCS-51单片机的串行通信
- 公司综合部二〇一二年度工作计划
- 试论大学生体育能力及其培养
- 2008汶川地震强震记录相关分析及与国内外地震记录对比
- 日本城市色彩营造研究_王占柱
- 城关一小2011年电化教育发展规划
- 北师大六年级上2.2百分数的应用【二】【1】练习题及答案
- 介词at用法总结
- 通信工程概预算培训试题及答案
- 药品经营许可证申请审查表
- 网络基础试题
- iTunes和AppStore