




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第十章文件 2 本章主要内容 文件概述文件的打开和关闭文件的顺序读写文件的定位与随机读写文件操作的出错检测 3 10 1文件概述 4 文件 10 1 1文件概念 程序文件 数据文件 存储在外部介质上的数据的集合 在C语言中 文件可以看作字节的序列 根据文件的数据组织形式 可以分为ASCII文件和二进制文件 也叫 文本流 二进制流 5 ASCII形式与二进制形式的比较 每一个字节放一个ASCII代码 代表一个字符 把数据按其在内存中的存储形式原样输出到磁盘上存放 6 对于每一个要操作的文件 都必须定义一个指向结构文件的指针变量 FILE 文件类型指针名 如果程序中同时要处理几个文件 则应该定义几个文件类型指针 例如 FILE fp1 fp2 fpn 7 缓存的概念 系统为打开的文件在内存中开辟的一块区域 当数据从内存向磁盘输出的时候 数据先送到缓存中 等缓存满了或者程序请求清空缓存时 数据才被写入磁盘 8 10 2文件的打开和关闭 9 FILE fopen constchar filename constcharmode r 可读w 可写 若文件不存在则创建 若存在 长度截为0a 添加 若文件不存在则创建 若文存在 则从末尾添加r 可读写w 可读写 类似w方式a 可读并添加rb wb ab r b rb w b wb a b ab 与没有b标志的模式功能相同 对象为二进制文件 10 2 1文件的打开 10 使用fopen 函数打开文件时 一般要检查文件打开的正确性 以便确定程序能否继续执行下去 例如 if fp fopen test r NULL printf Thisfilecan tbeopened n exit 1 return是返回函数调用 如果返回的是main函数 则为退出程序exit是在调用处强行退出程序 运行一次程序就结束 exit 1 表示异常退出 这个1是返回给操作系统的不过在DOS好像不需要这个返回值exit 0 表示正常退出 11 intfclose FILE stream 10 2 2文件的关闭 12 文件的读写包括非格式化读写和格式化读写 它们的用法不同 功能也不同 10 3文件的顺序读写 13 1 每次从流中读取一个字符 intfgetc FILE stream 如果函数调用成功 则返回值为所读取的字符 如果失败则返回EOF 调用方式为 FILE f1 c fgetc f1 10 3 1文件的非格式化读写 14 向流中写入一个字符 intfputc intc FILE stream 这个函数实现的功能是将c输到stream流的当前位置注意 对应getc和getchar ANSIC中定义了putc和putchar 功能同fputc fputc charc FILE stdout 输出一个字符 等价putchar charc stdprn为向打印机输出 15 例 编制程序 运行该程序后可以显示指定文件的内容 其程序如下 include stdio h include stdlib h voidmain intargc char argv intch FILE fp 16 if fp fopen argv 1 r NULL printf Thefile scan tbeopened argv 1 exit 1 ch fgetc fp 读取字符while ch EOF putchar ch 逐个输出字符ch fgetc fp 读取字符 printf argcis d argc fclose fp 17 2 每次一行的读写从stream中读取n 1个 并把它存储到buf指向的地址中char fgets char buf intn FILE stream 注意 如果一行超过了n 那么只读取其中的n 1个 最后还是以NULL结尾 通常n比欲读取的数据的长度少一 即n长度的buf总要为NULL留一个位置 ANSIC中可以使用如下函数来向流中写入一行内容 intfputs constchar str FILE stream 18 例 基于行的I O的使用 include includevoidmain void char buf intn 16 buf char malloc n 开辟存储空间while fgets buf n stdin NULL fputs buf stdout puts buf 19 运行上面的程序 如果输入字符串12345 运行结果如下 123451234512345如果输入字符串abcdefghijklmnopqrst 运行结果如下 abcdefghijklmnopqrstabcdefghijklmnoabcdefghijklmnopqrstpqrst 20 10 3 2文件的格式化写操作 ANSIC提供了如下的格式化输出函数intfprintf FILE stream constchar format argument 功能 据format指定的格式向stream中输入字符串其中 stream 已打开的文件指针format 指定的写格式串argument 输出变量列表 21 10 3 3文件的格式化读操作 ANSIC提供了如下的格式化输入函数 intfscanf FILE stream constchar format argument 22 把一个字符串和一个十进制整数写入e盘的tc目录下的test文件中 然后再从文件中读出来 includemain inta chars 80 FILE fp if fp fopen w NULL puts cannotopenfile exit fscanf stdin s d s e tc test e tc test 从键盘输入 23 fread fwrite include 语法 fread buffer size count fp fwrite buffer size count fp 参数 buffer 读 写数据的存放首地址size 每次要写 读的字节数count 读 写次数fp 文件指针返回 实际读 写的次数 功能 从文件中连续读入count次 字节数为size的数据块 存放在起始地址为buffer的内存区域 24 把一组数据写到文件中 然后再输出到屏幕上 include defineSIZE4voidsave FILE fp inti if fp fopen stu list wb NULL printf cannotopenfile n return for i 0 i SIZE i if fwrite structstu type charname 5 intnum intage charaddr 5 stud SIZE 25 voidload FILE fp1 inti if fp1 fopen stu list rb NULL printf cannotopenfile n return for i 0 i SIZE i fread 26 putw include 语法 intputw intw FILE fp 参数 w 要写入文件中的整数功能 以二进制形式 向文件中写一个int型的整数 其他读写函数 include 语法 intgetw FILE fp 功能 从文件中读一个二进制整型数 getw 27 fgets include 语法 char fgets 字符数组地址 n fp 功能 从文件中读入n 1字符 存入字符数组 include 语法 intfputs 字符串首地址 fp 功能 将字符串写入文件中 自动舍弃末尾 fputs 28 在对文件进行操作时 不一定始终都是从文件的开始位置进行操作的 因此 对文件的定位非常重要 TC提供了一系列的文件定位的函数 10 4文件的定位与随机读写 29 ANSIC对该函数定义如下 intfgetpos FILE stream fops t pos 功能 获得stream中文件指针当前的位置 存储在pos变量中 pos是保存文件指针的位置信息 该函数和fsetpos是ANSIC新增加的 该它可获得文件当前的位置 当以后调用fsetpos的时候可以重新将流定位到该位置 10 4 1fgetpos函数 30 ANSIC对该函数定义如下 intfsetpos FILE stream constfops t pos 该函数的功能是设置文件指针的偏移位置 函数运行如果成功 返回0 如果失败 返回非0 并设置errno 该函数使用的pos 通常都是以前从fgetpos函数得到的 10 4 2fsetpos函数 31 ANSIC对该函数定义如下 longintftell FILE stream 该函数的功能是获得stream中文件指针当前的位置 该函数如果运行成功 返回文件指针位置 如果失败 返回 1L 并设置errno 10 4 3ftell函数 32 ANSIC对该函数定义如下intfseek FILE stream longintoffset intwhence 功能 是控制文件指针在流当中的位置 offset表示位移的偏移量 whence是计算相对位移量的基点 它可取0 1和2三个值之一 base取值命名含义0SEEK SET文件开头1SEEK CUR文件当前位置2SEEK END文件末尾 10 4 4fseek函数 33 fseek fp 200L SEEK SET 将文件读 写位置指针移到距文件开头200个字节的位置fseek fp 150L 1 将文件读 写位置指针移到距当前位置150个字节的位置fseek fp 100L 2 将文件读 写位置指针移到距末尾100个字节的位置 34 将feof放在这里也许不太合适 该函数是用来判断一个流是否到达尾端的 ANSIC对该函数定义如下 intfeof FILE stream 该函数的功能是判断stream指向的流是否到达尾端 10 4 5feof函数 35 文件的定位函数rewind 对于文件的读写 一般来说 读文件时 指针是顺序下移的 若要指针强制性的移动到某个地方 就要涉及到文件的定位问题 voidrewind 文件指针 功能 将位置指针置于文件开头 返回值 无 36 10 5文件操作的出错检测 37 ANSIC对该函数定义如下 intferror FILE stream 功能 判断stream指向的流是否存在错误 出错时返回非0值 该函数通常用来判断流本身的错误 比如流意外被中断等错误 而类似scanf的函数指定的format与扫描的流的格式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产褥期产妇护理测试题库及答案
- 整体护理护师考试题库及答案
- 单调分类考试题及答案
- 赏景心情一次户外写生经历9篇
- 业务订单管理自动化系统基础架构模板
- 阅读中的深度思考与推理能力训练:高中阅读课教学教案
- 行政后勤费用合理化建议模板
- 合规数据资源承诺书4篇
- 商业保温材料供货协议
- 企业组织架构及职责权限明晰工具
- 无痛人流患者护理查房
- DDI:制造业人才发展成功实践手册
- 老年照护芳香疗法应用规范
- 2025年抗菌药物授权培训
- 风力发电征地协调方案(3篇)
- 2025至2030年中国汽车制动器行业市场分析研究及发展战略研判报告
- 2025至2030中国淀粉粘合剂行业现状调查与前景竞争对手分析报告
- 黑龙江:装配式混凝土矩形渠道应用技术规范(DB23-T 2334-2019)
- JG/T 127-2017建筑门窗五金件滑撑
- T/CGCC 7-2017焙烤食品用糖浆
- 江苏省2025年中职职教高考文化统考数学试题答案
评论
0/150
提交评论