




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 教学目标 本章主要讲授文件的打开与关闭 文件的读写 文件的定位等内容 通过学习 要求学生初步掌握有关文件的基本知识 本讲重点 文件类型指针 文件的打开 关闭与读写操作 教学方法 理论教学与实践教学相结合 2 8 1 语言文件概述8 2文件的打开与关闭8 3文件的读写操作8 4位置指针与文件定位8 5出错检测 第八章文件 3 在程序运行时 程序本身和数据一般都存放在内存中 当程序运行结束后 存放在内存中的数据被释放 如果需要长期保存程序运行所需的原始数据 或程序运行产生的结果 就必须以文件形式存储到外部存储介质上 4 8 1 语言文件概述 1 文件与文件名文件是指存放在外部存储介质上的数据集合 为标识一个文件 每个文件都必须有一个文件名 其一般结构为 主文件名 扩展名 文件命名规则 遵循操作系统的约定 2 文件分类可以从不同的角度对文件进行分类 1 根据文件的内容 可分为程序文件和数据文件 程序文件又可分为源文件 目标文件和可执行文件 2 根据文件的组织形式 可分为顺序存取文件和随机存取文件 5 3 根据文件的存储形式 可分为ASCII码文件和二进制文件 ASCII码文件的每1个字节存储1个字符 因而便于对字符进行逐个处理 但一般占用存储空间较多 而且要花费转换时间 二进制与ASCII码之间的转换 二进制文件是把内存中的数据 原样输出到磁盘文件中 可以节省存储空间和转换时间 但1个字节并不对应1个字符 不能直接输出字符形式 3 读文件与写文件所谓读文件是指 将磁盘文件中的数据传送到计算机内存的操作 所谓写文件是指 从计算机内存向磁盘文件中传送数据的操作 6 4 构成文件的基本单元与流式文件 语言将文件看作是由一个一个的字符 ASCII码文件 或字节 二进制文件 组成的 将这种文件称为流式文件 而在其它高级语言中 组成文件的基本单位是记录 对文件操作的基本单位也是记录 5 文件类型FILE系统给每个打开的文件都在内存中开辟一个区域 用于存放文件的有关信息 如文件名 文件位置等 这些信息保存在一个结构类型变量中 该结构类型由系统定义 取名为FILE 注意 结构类型名 FILE 必须大写 7 6 ANSIC的缓冲文件系统所谓缓冲文件系统是指 系统自动地在内存区为每个正在使用的文件开辟一个缓冲区 从内存向磁盘输出数据时 必须首先输出到缓冲区中 待缓冲区装满后 再一起输出到磁盘文件中 从磁盘文件向内存读入数据时 则正好相反 首先将一批数据读入到缓冲区中 再从缓冲区中将数据逐个送到程序数据区 8 8 2文件的打开与关闭 对文件进行操作之前 必须先打开该文件 使用结束后 应立即关闭 以免数据丢失 语言规定了标准输入输出函数库 用fopen 函数打开一个文件 用fclose 函数关闭一个文件 8 2 1文件的打开 fopen 函数1 用法 FILE fopen 文件名 操作方式 2 功能 返回一个指向指定文件的指针 3 函数原型 stdio h 注 对文件操作的库函数 函数原型均在头文件stdio h中 后续函数不再赘述 9 1 文件名 是指要打开 或创建 的文件名 如果使用字符数组 或字符指针 则不使用双引号 2 操作方式 如表12 1所示 例如 FILE fp fp fopen data 99 r 3 说明 1 如果不能实现打开指定文件的操作 则fopen 函数返回一个空指针NULL 其值在头文件stdio h中被定义为 为增强程序的可靠性 常用下面的方法打开一个文件 if fp fopen 文件名 操作方式 NULL printf cannotopenthisfile n exit 0 10 关于exit 函数1 用法 voidexit 程序状态值 2 功能 关闭已打开的所有文件 结束程序运行 返回操作系统 并将 程序状态值 返回给操作系统 当 程序状态值 为 时 表示程序正常退出 非 值时 表示程序出错退出 2 r b 与 a b 的区别 使用前者打开文件时 读写位置指针指向文件头 使用后者时 读写指针指向文件尾 3 使用文本文件向计算机系统输入数据时 系统自动将回车换行符转换成一个换行符 在输出时 将换行符转换成回车和换行两个字符 11 使用二进制文件时 内存中的数据形式与数据文件中的形式完全一样 就不再进行转换 4 有些 编译系统 可能并不完全提供上述对文件的操作方式 或采用的表示符号不同 请注意所使用系统的规定 5 在程序开始运行时 系统自动打开三个标准文件 并分别定义了文件指针 1 标准输入文件 stdin 指向终端输入 一般为键盘 如果程序中指定要从stdin所指的文件输入数据 就是从终端键盘上输入数据 12 2 标准输出文件 stdout 指向终端输出 一般为显示器 3 标准错误文件 stderr 指向终端标准错误输出 一般为显示器 8 2 2文件的关闭 fcolse 函数1 用法 intfclose FILE 文件指针 2 功能 关闭 文件指针 所指向的文件 如果正常关闭了文件 则函数返回值为 否则 返回值为非 例如 fclose fp 关闭fp所指向的文件 13 8 3文件的读写操作 8 3 1读 写文件中的一个字符 1 将一个字符写到文件中 fputc 函数 例8 1 将键盘上输入的一个字符串 以 作为结束字符 以ASCII码形式存储到一个磁盘文件中 程序功能 从键盘上输入一个字符串 存储到一个磁盘文件中 使用格式 可执行文件名要创建的磁盘文件名 include stdio h main intargc char argv FILE fp charch if argc 2 参数个数不对 printf thenumberofargumentsnotcorrect n n 14 printf Usage 可执行文件名filename n exit 0 if fp fopen argv 1 w NULL 打开文件失败 printf cannotopenthisfile n exit 0 输入字符 并存储到指定文件中 for ch getchar fputc ch fp 输入字符并存储到文件中 fclose fp 关闭文件 程序运行情况 abcdefg1234567 15 库函数fputc 1 用法 intfputc 字符数据 文件指针 其中 字符数据 既可以是字符常量 也可以是字符变量 2 功能 将字符数据输出到 文件指针 所指向的文件中去 同时将读写位置指针向前移动1个字节 即指向下一个写入位置 如果输出成功 则函数返回值就是输出的字符数据 否则 返回一个符号常量EOF 其值在头文件stdio h中 被定义为 1 16 2 从文件中读入一个字符 fgetc 函数和feof 函数 例8 2 顺序显示 例8 1 创建的磁盘ASCII码文件 程序功能 顺序显示一个磁盘ASCII码文件 参数 带参主函数 使用格式 可执行文件名源文件名 include stdio h main intargc char argv FILE fp charch if argc 2 参数个数不对 printf thenumberofargumentsnotcorrect n printf nUsage 可执行文件名源文件名 exit 0 17 if fp fopen argv 1 r NULL printf cannotopensourcefile n exit 0 顺序输出文件的内容 for ch fgetc fp EOF putchar ch 顺序读入并显示 fclose fp 关闭打开的文件 程序运行情况 abcdefg1234567 18 1 库函数fgetc 1 用法 intfgetc 文件指针 2 功能 从 文件指针 所指向的文件中 读入一个字符 同时将读写位置指针向前移动1个字节 即指向下一个字符 该函数无出错返回值 例如 fgetc fp 表达式 从文件fp中读一个字符 同时将fp的读写位置指针向前移动到下一个字符 2 关于符号常量EOF在对ASCII码文件执行读入操作时 如果遇到文件尾 则读操作函数返回一个文件结束标志EOF 其值在头文件stdio h中被定义为 1 在对二进制文件执行读入操作时 必须使用库函数feof 来判断是否遇到文件尾 19 案例8 3 实现制作ASCII码文件副本的功能 程序功能 制作ASCII码文件的副本 使用格式 可执行文件名源文件名目标文件名 include stdio h main intargc char argv FILE input output input 源文件指针 output 目标文件指针 charch if argc 3 参数个数不对 printf thenumberofargumentsnotcorrect n printf nUsage 可执行文件名source filedest file exit 0 20 if fp fopen argv 1 r NULL 打开源文件失败 printf cannotopensourcefile n exit 0 if fp fopen argv 2 w NULL 创建目标文件失败 printf cannotcreatedestinationfile n exit 0 复制源文件到目标文件中 for feof input fputc fgetc input output fclose input fclose output 关闭源文件和目标文件 21 库函数feof 1 用法 intfeof 文件指针 2 功能 在执行读文件操作时 如果遇到文件尾 则函数返回逻辑真 1 否则 则返回逻辑假 0 feof 函数同时适用于ASCII码文件和二进制文件 例如 feof input 表示源文件 用于输入 未结束 循环继续 22 8 3 2读 写一个字符串 fgets 和fputs 例8 4 将键盘上输入的一个长度不超过80的字符串 以ASCII码形式存储到一个磁盘文件中 然后再输出到屏幕上 参数 可执行文件名要创建的磁盘文件名 include stdio h main intargc char argv FILE fp charstring 81 字符数组用于暂存输入输出的字符串 if argc 2 参数太多 提示出错 printf Toomanyparameters n n printf Usage 可执行文件名filename n exit 0 23 if argc 1 缺磁盘文件名 提示输入 printf Inputthefilename gets string 借用string暂存输入的文件名 argv 1 char malloc strlen string 1 给文件名参数申请内存空间 strcpy argv 1 string 复制文件名到形参中 if fp fopen argv 1 w NULL 打开文件失败 printf cannotopenthisfile n exit 0 从键盘上输入字符串 并存储到指定文件中 printf Inputastring gets string 从键盘上输入字符串 fputs string fp 存储到指定文件 fclose fp 24 重新打开文件 读出其中的字符串 并输出到屏幕上 if fp fopen argv 1 r NULL 打开文件失败 printf cannotopenthisfile n exit 0 fgets string strlen string 1 fp 从文件中读一个字符串 printf Outputthestring puts string 将字符串输出到屏幕上 fclose fp 1 为增强程序的可靠性 程序中对参数过多的情况 提示出错 并终止程序运行 而遗漏文件名时 提示用户输入 同时 为增强程序的人机交互性 凡是需要用户输入数据的地方 都设置提示输入的信息 凡是输出数据的地方 都设置输出说明信息 25 2 库函数fputs 向指定文件输出一个字符串1 用法 intfputs 字符串 文件指针 其中 字符串 可以是一个字符串常量 或字符数组名 或字符指针变量名 2 功能 向指定文件输出一个字符串 同时将读写位置指针向前移动strlength 字符串长度 个字节 如果输出成功 则函数返回值为 否则 为非 值 3 库函数fgets 从文件中读一个字符串1 用法 char fgets 指针 串长度 1 文件指针 2 功能 从指定文件中读入一个字符串 存入 字符数组 指针 中 并在尾端自动加一个结束标志 0 同时 将读写位置指针向前移动strlength 字符串长度 个字节 如果在读入规定长度之前遇到文件尾EOF或换行符 读入即结束 26 8 3 3读 写一个数据块 fread 和fwrite 实际应用中 常常要求1次读 写1个数据块 为此 ANSIC标准设置了fread 和fwrite 函数 1 用法 intfread void buffer intsize intcount FILE fp intfwrite void buffer intsize intcount FILE fp 2 功能 fread 从fp所指向文件的当前位置开始 一次读入size个字节 重复count次 并将读入的数据存放到从buffer开始的内存中 同时 将读写位置指针向前移动size count个字节 其中 buffer是存放读入数据的起始地址 即存放何处 27 fwrite 从buffer开始 一次输出size个字节 重复count次 并将输出的数据存放到fp所指向的文件中 同时 将读写位置指针向前移动size count个字节 其中 buffer是要输出数据在内存中的起始地址 即从何处开始输出 如果调用fread 或fwrite 成功 则函数返回值等于count fread 和fwrite 函数 一般用于二进制文件的处理 28 8 3 4对文件进行格式化读 写 fscanf 和fprintf 函数 与scanf 和printf 函数的功能相似 区别在于 fscanf 和fprintf 函数的操作对象是指定文件 而scanf 和printf 函数的操作对象是标准输入 stdin 输出 stdout 文件 intfscanf 文件指针 格式符 输入变量首地址表 intfprintf 文件指针 格式符 输出参量表 例如 inti 3 floatf 9 80 fprintf fp 2d 6 2f i f fprintf 函数的作用是 将变量i按 2d格式 变量f按 6 2f格式 以逗号作分隔符 输出到fp所指向的文件中 3 9 80 表示1个空格 29 8 3 5读 写函数的选用原则 从功能角度来说 fread 和fwrite 函数可以完成文件的任何数据读 写操作 但为方便起见 依下列原则选用 1 读 写1个字符 或字节 数据时 选用fgetc 和fputc 函数 2 读 写1个字符串时 选用fgets 和fputs 函数 3 读 写1个 或多个 不含格式的数据时 选用fread 和fwrite 函数 4 读 写1个 或多个 含格式的数据时 选用fscanf 和fprintf 函数 30 8 4位置指针与文件定位 文件中有一个读写位置指针 指向当前的读写位置 每次读写1个 或1组 数据后 系统自动将位置指针移动到下一个读写位置上 如果想改变系统这种读写规律 可使用有关文件定位的函数 8 4 1位置指针复位函数rewind 1 用法 intrewind 文件指针 2 功能 使文件的位置指针返回到文件头 8 4 2随机读写与fseek 函数对于流式文件 既可以顺序读写 也可随机读写 关键在于控制文件的位置指针 所谓顺序读写是指 读写完当前数据后 系统自动将文件的位置指针移动到下一个读写位置上 31 所谓随机读写是指 读写完当前数据后 可通过调用fseek 函数 将位置指针移动到文件中任何一个地方 1 用法 intfseek 文件指针 位移量 参照点 2 功能 将指定文件的位置指针 从参照点开始 移动指定的字节数 1 参
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瑞达法考课件上传时间
- 瑞辉网络安全培训课件
- 开发认养农业合作协议书4篇
- 瑞丽风情教学课件
- 安全施培训心得课件
- 福州大型清洗工程方案(3篇)
- 农业碳汇开发模式创新与2025年市场潜力预测报告
- 电网工程绿色策划方案(3篇)
- 安全文明施工培训课件
- 纺织旧厂改造工程方案(3篇)
- 《新生儿脐静脉置管相关并发症防控指南》解读课件
- 肠梗阻业务学习
- 六项精进读书分享会
- 中国偏头痛诊断与治疗指南(2023版)
- 幼儿园教辅资料征订及管理办法
- 景区旅游安全风险评估报告
- 2024年保安服装项目可行性研究报告
- 江苏凤凰少年儿童出版社小学四年级上册书法练习指导教学计划与教学设计
- 2020年新人教版必修三《Unit 2 Morals and Virtues》单元教案(附导学案)
- DL-T 1476-2023 电力安全工器具预防性试验规程
- 2023年10月自考02207电气传动与可编程控制器PLC试题及答案含解析
评论
0/150
提交评论