




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章文件操作 本章内容提要 11 1C语言文件操作的基本概念11 2C语言文件操作数据结构11 3C语言文件操作函数11 4字符文件应用11 5二进制文件应用重点小结作业 11 1C语言文件操作的基本概念 11 1 1C语言流文件的概念所谓流 stream 是指C语言文件操作函数与物理文件之间的一种数据结构与操作规程 一般说来 流是指文件按存储顺序形成的字节序列 1 缓冲文件内存中开辟一个适当大小的内存块称为文件缓冲区 用来保存文件一部分数据 读写文件不直接针对物理文件本身 而是对缓冲区进行 由内部程序实现缓冲区与文件的数据更新 11 1C语言文件操作的基本概念 续1 2 非缓冲文件任何读写操作直接针对物理文件进行 缓冲文件可有效减低磁盘的访问频度 C语言两种文件操作方式都提供 但我们主要应用的是缓冲文件 即流文件 ANSIC标准决定不采用非缓冲文件系统而只采用缓冲文件系统 因此本章将只介绍C语言的缓冲文件操作函数 通常所说的流文件就是指ANSI标准的字节流缓冲文件 11 1C语言文件操作的基本概念 续2 11 1C语言文件操作的基本概念 续3完 11 1 2顺序文件与随机文件操作1 顺序文件读文件或者写文件操作只能按照顺序进行 对于字节流文件 即读 写文件的第i个字节前必须顺序读出 写入前面的i 1个字节 2 随机文件对于字节流文件允许直接读 写文件的第i个字节 C语言的文件操作函数两种方式都可以实现 11 2C语言文件操作数据结构 1 FILE结构类型定义于stdio h中 是文件操作的句柄结构 我们无需关心该结构的详细内容 C函数通过一个FILE 型指针 对文件进行操作 例如 FILE fp fr fw 2 空文件指针常量 NULL等价于03 文件读操作结束 失败 标志常量 EOF等价于 1以上两个常量均已定义于stdio h中 11 2C语言文件操作数据结构 续1完 4 系统标准输入 输出文件已定义于stdio h中 用户可在程序中直接使用 1 stdin 标准输入文件 即键盘输入 r 型 2 stdout 标准输出文件 即显示屏 w 型 3 stderr 标准错误输出文件 一般指显示屏 w 型 11 3C语言文件操作函数 1 打开文件函数原形FILE fopen char fname char mode 1 fname 指文件名 可包含盘符与路径信息如 ABC TXT C user abc txt 2 返回值为NULL表明文件打开失败 否则打开成功 为一个有效的FILE 型指针值 3 mode 文件打开方式字符串 11 3C语言文件操作函数 续1 w 11 3C语言文件操作函数 续2 说明 a 打开文件失败的可能情况主要有 I对于含字母r的打开方式 失败情况主要是 文件不存在 文件名或路径名有错误对含r方式打开的文件 一定要测试文件是否打开成功 否则会带着错误正常运行下去II对于含有w或a字母的打开方式 失败的情况主要是 磁盘空间不足或磁盘故障 b 打开方式串中的字母必须小写 不能够大写 11 3C语言文件操作函数 续3 例如 FILE fr fw fr fopen abc txt r if fr NULL printf Fileopenerror n exit 0 fw fopen abc bak w 2 关闭文件 1 intfclose FILE fp 一般不用返回值 11 3C语言文件操作函数 续4 如 fclose fr fclose fw 对于写入方式打开的文件 一定要用fclose关闭文件 否则可能有数据未从缓冲区写入磁盘 原则上 fclose与fopen配对使用 2 intfcloseall 该函数关闭本应用程序所有打开的文件 3 文件读写函数 1 单字节读写函数 字符与二进制文件都适用 11 3C语言文件操作函数 续5 intfputc intch FILE fp ch的低8位 1字节 写入文件 成功 返回写入的该字节 0 255 失败 返回EOF 1 intfgetc FILE fp 从文件中读出一个字节并返回 成功 函数返回值为0 255 即读出的字节 失败 返回值为EOF 1 11 3C语言文件操作函数 续6 2 字符串读写函数 字符与二进制文件均适用 char fgets char s intn FILE fp 从文件中连续读出n 1个字符存入字符指针s开始的内存 最后自动加上一个字符 0 成功 函数返回值为s 失败 返回值为NULL intfputs char s FILE fp 将字符串s写入文件 不写入 0 成功 函数返回非负整数 失败 返回EOF 11 3C语言文件操作函数 续7 3 格式化读写函数 仅字符文件适用 intfscanf FILE fp char format 11 3C语言文件操作函数 续8 4 字节块读写函数 仅二进制文件适用 unsignedfread void buffer unsignedsize unsignedcount FILE fp 从文件中连续读出size count个字节存入指针buffer开始的内存 返回实际读出的字节数 unsignedfwrite void buffer unsignedsize unsignedcount FILE fp 从内存地址buffer开始 写size count字节到文件中 返回实际写入文件的字节数 11 3C语言文件操作函数 续9 4 数据读写位置指针操作函数 1 文件数据读写位置指针的概念字节流文件的读写位置以字节为单位编号 长度为n字节的文件 第一字节的编号为0 最后一个字节的编号为n 1 因此文件数据读写位置指针的有效范围为0 n 1 2 数据读写位置指针的自动移动规则 a 任何方式打开文件时 指针初态都是0 11 3C语言文件操作函数 续10 b 含a的打开方式 只要进行写操作 则指针自动移到文件当前结束位置即位置n n为当前文件已有字节数 处 c 进行任何读写操作时 指针总是从当前位置开始读写 读写结束后 指针当前位置自动移动到读写之后的位置 3 数据读写位置指针的操作函数voidrewind FILE fp 重置当前读写位置指针为0 11 3C语言文件操作函数 续11 longftell FILE fp 返回当前文件读写位置指针值 intfseek FILE fp longoffset intstartpos 读写位置指针移动到偏移startpos指定的位置offset字节处 startpos 0SEEK SET文件开始处 位置0 1SEEK CUR当前指针位置处2SEEK END文件结尾处 位置n n为文件当前字节长度 11 3C语言文件操作函数 续12 SEEK SET SEEK CUR SEEK END 11 3C语言文件操作函数 续13 5 读操作失败标志函数intfeof FILE fp 当且仅当文件当前读写位置指针在有效数据区以外并进行了读操作 函数返回值不等于0 其余情况 函数的返回值是0 注意 执行fseek rewind或者任何写操作后 该函数的返回值将是0 6 可读 可写打开方式中的读写操作切换 11 3C语言文件操作函数 续14 fopen函数中的打开方式串若含有 号 允许对文件进行读操作和写操作 C语言规定 读操作和写操作切换时 中间必须间隔fseek函数 例如 字节流为ABCDEFGH 以 r 方式打开文件 当前读写位置指针 执行语句charch fgetc fp ch得到 E ABCDEFGH 读写位置指针指向F 当前读写位置指针 11 3C语言文件操作函数 续15 此时若将F改写为f 则fseek fp 0L SEEK CUR 指针原地踏步 fputc f fp 若不执行前面的fseek 此句无法正常写入 ABCDEfGH 读写位置指针指向G 当前读写位置指针 11 3C语言文件操作函数 续16 7 字符文件与二进制文件操作的区别若文件以字符文件方式打开时 当向文件写入字节 n 10 写操作函数 fputc fputs fprintf 先自动写入字符 r 13 当从文件读到字节 r 13 时 读操作函数 fgetc fgets fscanf 不返回 r 而是跳过 r 读出紧跟在它后面的字节 n 10 并返回 n 二进制文件打开方式没有上述特性 即每个字节都一视同仁 11 3C语言文件操作函数 续17 8 操作系统文件操作命令函数头文件stdio h文件更名intrename char oldname char newname 成功 函数返回0 否则返回 1 文件更名必须符合操作系统关于文件更名的规定 例如 rename A1 DAT A2 DAT 11 3C语言文件操作函数 续18完 2 删除文件intremove char path 删除磁盘上由文件名path指定的文件 删除文件成功 返回0 否则返回 1 删除文件失败的可能情况是 没有指定正确的文件名 文件不存在 或者文件是只读属性 例如 remove D TC A C 11 4字符文件应用 例11 3打印如下图形到屏幕上与正文文件ABC TXT中 要求打印行数n由键盘输入 135791113151719 n行 算法设计 屏幕上怎样输出 就在字符文件中怎样输出 include stdio h voidmain intn i j k FILE fw printf Inputn scanf d 11 4字符文件应用 续1 11 4字符文件应用 续2 例11 4用正文文件A1 TXT提供数据建立一个矩阵 然后输出转置矩阵到正文文件A2 TXT 算法设计 设矩阵为4行3列整型矩阵 建立A1 TXT文件内容如下 1235678910111213 文件A1 TXT可用任何字符文件编辑软件建立 如WINDOWS的 记事本 程序 11 4字符文件应用 续3 include stdio h defineN4 defineM3voidmain longa N M b M N inti j FILE fw fr fr fopen a1 txt r fw fopen a2 txt w if fr printf Filea1 txtnotfound n return for i 0 i N i for j 0 j M j fscanf fr ld 11 4字符文件应用 续4 问题与思考 1 建立字符文件A1 TXT时 A1 TXT应该存在什么目录 文件夹 中 答 A1 TXT应该存放在与源程序文件相同的目录中 2 程序建立的A2 TXT存放在哪里 typea1 txt显示的文件内容 该文件可用TC集成环境或WINDOWS记事本等编辑器建立 12356789101213 例11 5编程统计一个C源程序文件的字符行数 算法设计 C源程序文件名由键盘输入 统计文件中包含的 n 字符数目 输出文件a2 txt的内容1581126912371013 11 4字符文件应用 续5 11 4字符文件应用 续6 include stdio h voidmain FILE fr charch charfname 81 intn 0 printf InputaCsourcefilename gets fname fr fopen fname r if fr printf file snotfound n fname return while 1 ch fgetc fr if feof fr break if ch n n printf numberofrows d n n fclose fr 11 4字符文件应用 续7 算法设计 C源程序文件名由键盘输入 设置一个计数变量c 初值为0 读到左 则c自加1 遇到右 则自减1 扫描文件过程中 出现c0都说明 没有配对 include stdio h voidmain FILE fr intch charfname 81 intc printf InputCsourcefilename gets fname fr fopen fname r if fr printf file snotfound n fname return 例11 6判断一个C源程序中的大括号 是否配对 11 4字符文件应用 续8 c 0 while 1 ch fgetc fr if ch EOF break if ch c if ch c if c 0 break c 0 说明大括号配对不正确 if c 0 printf braceserror n elseprintf bracesright n fclose fr 11 4字符文件应用 续9完 例11 8输入一句英文 将其作为一行 添加进文本文件B TXT中 include stdio h voidmain chars 81 FILE fp charch p fp fopen B TXT a 字符文件添加写方式 printf Inputastring n gets s fputs s fp fputc n fp fclose fp 问题与思考 文件B TXT需要事先建立吗 11 5二进制文件应用 例11 9编程实现文件复制程序 要求源文件名和目的文件名可以用命令行参数提供 也可以提示从键盘输入 include stdio h include string h voidmain intargc char argv FILE fr fw intch charsfn 81 dfn 81 if argc 3 strcpy sfn argv 1 strcpy dfn argv 2 else printf InputSourcefilename gets sfn printf InputDestinationfilename gets dfn 11 5二进制文件应用 续1 fr fopen sfn rb 二进制只读方式打开源文件 if fr printf Sourcefile snotfound n sfn return fw fopen dfn wb 二进制只写方式打开目标文件 if fw printf Destinationfile scannotbecreated n dfn return ch fgetc fr 典型循环结构 一 while feof fr fputc ch fw ch fgetc fr fcloseall 11 5二进制文件应用 续2 例11
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时间的脚印课件王晶
- 教务主任期中质量分析
- 护理常规培训内容
- 时钟造型基础知识培训课件
- 二零二五版房屋地基下沉修复赔偿合同
- 2025版出轨离婚赔偿金协议书(含法律咨询与执行)
- 二零二五年度房地产开发项目贷款合同范本正规范本
- 旭东化学课件获取
- 二零二五年度动产抵押消费贷款合同编写指南
- 高三试卷:四川省雅安市2024-2025学年高三上学期11月零诊试题数学答案
- 医院感染管理培训课件:妇产科感染的防治措施
- 农村伪劣食品总结汇报
- 人体解剖学与组织胚胎学(高职)全套教学课件
- 展会现场管理方案
- 二年级上册语文教材解读-
- 舟山沈家门渔港案例详解
- 宫颈癌护理教学查房
- 浅谈欧派系列产品营销策略
- 2012年数学建模D题机器人避障问题论文
- 学校文印室及时服务方案
- 消防喷淋设施暂停申请书
评论
0/150
提交评论