C语言程序设计-第13章 文件
更新时间:2023-05-24 11:58:01 阅读量: 实用文档 文档下载
湖南工学院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章 文件05-24
国内重要省市电价表08-10
华夏第一樟作文600字07-07
本电梯公司维保管理与考核制度06-13
比例电磁铁工作原理03-11
农民法律意识的现代化是我国现代化的关键05-13
文员实习日记08-11
《马克思主义哲学原理》教案12-17
爱的誓言经典语句02-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 程序设计
- 语言
- 文件
- 食品安全自检自查与报告制度
- 有关青少年犯罪的社会工作介入文献综述
- 第五课时 5、4、3、2加几
- 会计系毕业论文 函证
- 常春藤小学学生食堂承包合同书 2
- 龙门中学校园广播投稿说明
- 一种程控交直流电阻箱
- 百度沸点排行榜解读报告
- 试论大学生体育能力及其培养
- 《党章》《准则》《条例》学习心得
- 教师年度考核优秀材料
- 公司股东会决议范文
- 隧道窑制品加热过程的研究
- 布林茅尔学院-全美文理学院排名第三十
- 基于plc的变频恒压供水控制系统
- 烟台德语培训烟台德语培训学校
- 中央财经大学金融硕士考研辅导班参考书分享@才思
- 2021年高二下学期期末统一考试数学(文)试题 含答案
- 轴承滚珠等离子体浸没离子注入过程的数值模拟
- 基于SPWPM的移相全桥高频链逆变器研究