




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十二章文件 12 1文件系统概述 12 2标准文件操作 12 3非标准文件操作 文件 文件是存储在外部存储介质上的信息的集合 每个文件有唯一的文件名 主名 后缀 来标识 计算机实现按名对文件进行读 写等有关操作 广义上 操作系统将每一个与主机相联的输入输出设备都看作是文件 显示器 打印机是输出文件 键盘是输入文件 一 文件定义与分类 12 1文件系统概述 12 1文件系统概述 2 文件的分类 1 按存储介质 磁盘文件 磁带文件 2 按文件的内容 源程序 目标文件 数据文件 3 按文件的编码方式 存储形式 文本文件 二进制文件 12 1十文件系统概述 二 数据文件的存储形式 1 字符文件 文本文件 每个字符用一个ASCII码存储 即一个字符占一个字节 2 二进制文件 以数据在内存中的形式原样存于磁盘 如 一个任意整数 int型 其二进制文件存储方式都是占 个字节 而字符文件存储方式所占字节数 该数的数字个数 int型数二进制文件字符文件126 字节 字节1268 字节 字节 12 1文件系统概述 例如 整数1268 文本文件形式 1 的ASCII码 00110001 00110010 00110110 00111000 二进制文件形式 00000100 11110100 1268的二进制数 文件系统概述 2 的ASCII码 6 的ASCII码 8 的ASCII码 三 标准文件系统 非标准文件系统 程序数据区 输出文件缓冲区 输入 输入文件缓冲区 输出 输入 磁盘 内存 非标准文件系统 不使用缓冲区的磁盘文件系统 标准c采用缓冲文件系统 其原理图如下 输出 12 1十文件系统概述 4 文件存取方式 在C语言中 文件的存取有两种方式 2 随机存取 1 顺序存取 文件位置指针 12 1十文件系统概述 12 2标准文件操作 一 标准文件类型指针 每个被使用的文件都在内存中开辟一个区域 用来存放文件的有关信息 这些信息是保存在一个结构体类型的变量中 该结构体类型是由系统定义的 取名为FILE 1 文件类型指针概述 12 2标准文件操作 typedefstruct shortlevel unsignedflags charfd unsignedcharhild shortbsize unsignedchar buffer unsignedistemp shorttoken FILE FILE 一个标准的标识符 但不是关键字 12 2标准文件操作 typedefstruct shortlevel unsignedflags charfd unsignedcharhild shortbsize unsignedchar buffer unsignedistemp shorttoken FILE 有的C版本在stdio h文件中有以下的类型定义 不同系统有区别 不必深究 12 2标准文件操作 如FILE fp fp是一个指向FILE类型结构体的指针变量 通过该结构体变量中的文件信息能够访问该文件 如果有N个文件 一般应设N个指针变量 使它们分别指向N个文件 确切地说 指向该文件的信息结构体 以实现对文件的访问 FILE 指针变量标识符 2 文件型指针变量的定义 12 2标准文件操作 标准文件操作的四个基本步骤 1 文件类型指针的定义 2 打开标准文件 3 标准文件的读或写的操作 4 标准文件的关闭操作 12 2标准文件操作 打开文件 对文件进行读或写 关闭文件 文件的操作步骤 文件打开函数 文件读写函数 文件关闭函数 12 2标准文件操作 定义文件类型指针 指针定义 二 标准文件的打开 打开文件的含义 将文件信息从磁盘装入计算机内存 建立文件的各种有关信息 并使文件指针指向该文件 即建立文件类型指针与文件名之间的关联 2 文件的打开函数 fopen fp fopen 文件名 使用文件方式 函数原型 FILE fopen char filename char mode 12 2标准文件操作 返回值 FILE类型指针 成功NULL 失败 fopen 函数的返回值应赋给一个FILE指针变量 否则 此函数的返回值就会丢失 导致无法对此文件进行操作 12 2标准文件操作 例如 FILE fp fp fopen A1 r 以上语句表示 要打开名字为A1的文件 使用文件方式为 读入 fp指向A1文件 文件打开函数的调用给编译系统的三个信息 12 2标准文件操作 1 需要打开的文件名 2 使用文件的操作方式 3 让哪一个指针变量指向被打开的文件 r 只读 为输入打开一个文本文件 w 只写 为输出打开一个文本文件 a 追加 向文本文件尾增加数据 rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二进制文件 ab 追加 向二进制文件尾增加数据 3 C语言文件操作方式 12 2标准文件操作 r read w write a append b binary 读写 r 读写 为读 写打开一个文本文件 w 读写 为读 写建立一个新的文本文件 a 读写 为读 写打开一个文本文件 rb 读写 为读 写打开一个二进制文件 wb 读写 为读 写建立一个新的二进制文件 ab 读写 为读 写打开一个二进制文件 C语言文件操作方式 续 12 2标准文件操作 r read w write a append b binary 读写 1 用 r 方式打开的文件只能用于向计算机输入数据 而且该文件应该已经存在 4 标准文件操作方式的说明 1 5 12 2标准文件操作 2 用 w 方式打开的文件只能用于向该文件写数据 而不能用来向计算机输入 如果不存在该文件 则在打开时建立一个 如果存在该文件 则新写入的数据将覆盖掉以前的数据 3 如果希望向文件末尾添加新的数据 不希望删除原有数据 则应该用 a 方式打开 4 用 r w a 方式打开的文件可以用来输入和输出数据 5 在程序开始运行时 系统自动打开三个标准文件 标准输入 stdin 标准输出 stdout 标准出错输出 stderr 4 标准文件操作方式的说明 1 5 12 2标准文件操作 例11 1 打开D盘根下的myfile txt文件 验证文件能否正确打开 include include stdlib h voidmain FILE fa if fa fopen d myfile txt r NULL printf nCannotopenthefile exit 0 exit 1 发生错误后退出程序exit 0 表示正常退出 elseprintf nOpen 提示 1 该文件在磁盘上不存在 存在时 比较运行结果 2 将程序中的 r 改为 w 当该文件在磁盘上不存在 存在时 比较运行结果 12 2标准文件操作 三 标准文件的关闭函数 fclose 关闭文件指针fp所指的文件 释放相应的文件信息区 正常关闭文件时 函数返回值为0 函数原型 intfclose FILE fp 功能 在使用完一个文件后应该关闭它 以防止它再被误用 12 2标准文件操作 函数原型 四标准文件读写函数 1 读文件字符函数 fgetc fp是指向所读文件指针变量 intfgetc FILE fp 函数功能 从文件指针fp指向的文件当前位置 位置指针 读出一个字符 然后文件位置指针自动后移 指向文件中的下一个字符 返回值为读入的字符 若遇到文件结束符 则返回结束符EOF 1 例 ch fgetc fp 12 2标准文件操作 例11 2将磁盘文件 d myfile txt 的信息读出并显示到屏幕上 假设文件已经存在 若不存在 可以用记事本或其它文本编辑器编辑一个 include stdio h include stdlib h voidmain FILE fp charc filename 20 printf inputfilename gets filename if fp fopen filename r NULL printf nFilenotexist exit 0 while c fgetc fp EOF putchar c fclose fp 12 2标准文件操作 2 文件写入字符函数 fputc 函数返回值 输出成功 返回值就是输出的字符 输出失败 返回一个EOF 值为 1 功能 把一个字符ch写到fp指向的磁盘文件上去 函数原型 intfputc intch FILE fp 例 FILE fp charch A fputc ch fp 12 2标准文件操作 例11 4从键盘输入一些字符存到一个磁盘文件data dat中 以 结束 include stdio h include stdlib h voidmain FILE fp charc if fp fopen d filea dat w NULL printf nFilecannotopen exit 0 while c getchar fputc c fp fclose fp 12 2标准文件操作 例11 5将文件D filea dat的内容复制到文件D fileb dat中 include stdio h include stdlib h voidmain FILE f1 f2 charc if f1 fopen d filea dat r NULL printf nFilecannotopen exit 0 if f2 fopen d fileb dat w NULL printf nFilecannotcreat exit 0 while c fgetc f1 EOF fputc c f2 fclose f1 fclose f2 12 2标准文件操作 文件的检测函数 文件结束检测函数feof函数原型 intfeof FILE fp 函数功能 判断fp指向的文件是否处于文件结束位置 如文件结束 则返回值为1 否则为0 12 2标准文件操作 include stdio h voidmain FILE fp1 fp2 fp1 fopen d student dat r fp2 fopen d studentNew dat w while feof fp1 putchar getc fp1 rewind fp1 while feof fp1 putc getc fp1 fp2 fclose fp1 fclose fp2 例有一个磁盘文件 第一次使它显示在屏幕上 第二次把它复制到另一文件上 12 2标准文件操作 3 读文件字符串函数 fgets 从指针fp指向的文件中读取len 1个字符 把它送到由指针buf指向的字符数组中 char fgets char buf intlen FILE fp 函数原型 函数功能 字符数组的长度应大于len 可存放len 1个字符 字符数组的最后一个元素为 0 若在读入len 1个字符前遇到换行符 n 或文件结束符号EOF 立即结束读入操作 12 2标准文件操作 例11 6利用函数fgets 将文本文件filea txt中的内容全部读出并显示在屏幕上 分析 1 一般地 文本文件以行为单位 每行最多80个字符 则每行至少需要81个字节的存储空间 2 使用函数fgets读取字符串时 若在读入len 1个字符完成之前遇到换行符 n 或文件结束符号EOF 立即结束读入操作 无论读入的字符是否等于或小于len 1个 函数为读入的字符串之后加一个 0 因此 读入的字符 包括 0 只有len个 3 定义文件指针 4 以只读方式打开文件 5 当文件未结束时 反复读出字符串并输出 6 关闭文件 12 2标准文件操作 include stdio h include stdlib h voidmain FILE fp charstr 81 if fp fopen d filea dat r NULL printf Cannotopenfile getchar exit 1 while fgets str 81 fp NULL puts str fclose fp 例11 6之程序利用函数fgets 将文本文件D filea dat中的内容全部读出并显示在屏幕上 12 2标准文件操作 4 将字符串写入文件的函数 fputs char fputs char buf FILE fp 把由指针buf指向的字符数组中的字符串写入由指针fp指向的文件中 buf 字符串常量 字符数组名 指针变量 函数原型 函数功能 12 2标准文件操作 include stdio h include stdlib h voidmain FILE fp1 fp2 charbuf 81 if fp1 fopen D filea dat r NULL printf Filecannotopen exit 0 if fp2 fopen D filec dat w NULL printf Filecannotopen exit 0 while fgets buf 81 fp1 NULL fputs buf fp2 fclose fp1 fclose fp2 例11 7从D fiela dat读入字符 将它们添加到磁盘文件D filec dat中 12 2标准文件操作 5 数据块读写函数 fread和fwrite buffer 是一个指针 对于fread 它是读入数据的存放地址 对于fwrite 是要输出数据的地址 起始地址 size 要读写的字节数 count 要进行读写多少个size字节的数据项 fp 文件型指针 intfread void buffer intsize intcount FILE fp intfwirte void buffer intsize intcount FILE fp 函数原型 12 2标准文件操作 例11 8从键盘输入两个学生的信息 写入磁盘文件d stu dat中 分析 1 建立学生信息的结构体 2 定义文件指针 3 打开指定的文件 4 将学生信息写入文件 5 关闭文件 12 2标准文件操作 include stdio h include stdlib h structstudent charname 10 intnum intage charaddr 15 boy 5 pp definesizesizeof structstudent voidmain FILE fp charch filename 20 inti fp fopen d stu dat wb 以读写方式打开二进制文件 也省略了检测 printf ninputdata n pp boy for i 0 iname 将两个学生的信息写入文件 12 2标准文件操作 例11 9将磁盘文件stu dat中的学生信息输出到屏幕上 include stdio h include stdlib h structstu charname 10 intnum intage charaddr 15 boy 5 pp definesizesizeof structstu voidmain FILE fp charch filename 20 inti pp boy fp fopen d stu dat rb printf n nname tnumberageaddr n fread pp size 5 fp for i 0 iname pp num pp age pp addr fclose fp 12 2标准文件操作 一般调用方式为 6 格式化写读函数 fprintf和fscanf fprintf 文件指针 格式字符串 输出表列 fscanf 文件指针 格式字符串 输入表列 按照指定格式 向文件写 按照指定格式 从文件读 注意 fprintf和fscanf函数对磁盘文件读写printf和scanf函数对显示器或键盘操作 12 2标准文件操作 例如 fscanf fp d f 按格式字符串规定的格式 从fp指定的文件中读取数据分别送入变量i和t中 若磁盘文件上有以下字符 4 5 6则 4 i5 6 t fprintf fp d 6 2f i t 将整型变量i和实型变量t的值按 d和 6 2f的格式输出到fp指向的文件上 如果i 5 t 5 8 则输出到磁盘文件上的是以下的字符串 5 5 80 12 2标准文件操作 例11 10按指定的格式 将学生信息写入到一个二进制文件student dat中 include stdio h include stdlib h structstudent charname 10 intnum intage charaddr 15 boy 2 pp definesizesizeof structstudent voidmain FILE fp inti printf ninputdata n pp boy for i 0 iname 12 2标准文件操作 例11 11从文件student dat中 按指定的格式 将学生信息读出并显示到屏幕上 include stdio h include stdlib h structstudent charname 10 intnum intage charaddr 15 boy 2 pp definesizesizeof structstudent voidmain FILE fp inti pp boy if fp fopen d student dat r NULL printf Cannotopenfile exit 1 for i 0 iname 12 2标准文件操作 五文件的随机读写 移动文件位置指针的操作称为文件的定位 实现随机读写的关键是要按指定的条件进行文件的定位操作 文件定位操作是通过库函数的调用来完成的 在每个打开的文件中 有一个文件位置指针 它指向将要读写的字符位置 当对文件进行顺序读写时 每读完一个字符 该位置指针就自动移到下一个字符位置 在实际问题中 常要求读写文件中某些指定的部分 为了避免不必要的读或写的操作 可先移动文件的位置指针到需要读写的位置 再进行读写 这种读写操作方式称为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国会计师职业资格认证考试题库解析
- 屠宰前动物健康检查与监控
- 面包储存与运输管理方案
- 学生宿舍楼建设项目的风险管理
- 保障性租赁住房绿色施工管理方案
- 食品安全管理体系与检测方案
- 储能电池生产工艺优化与改进方案
- 2025年多模态评估指标(含答案与解析)
- 2025年文化创意产业园区建设项目申请报告:文化创意产业品牌建设与推广
- 新能源上市公司研发实力与技术转化效率报告2025展望
- 2025年有害生物防治员初级理论知识考核试题及答案
- 新版2026统编版小学道德与法治三年级上册 第4课《 科技力量大》第1课时 科技改变生活和科技改变观念 教案设计(教案)
- 2025-2026学年湘教版(2024)初中地理七年级上册教学计划及进度表
- 学会交流与沟通课件
- 铁路监理培训考试试题及答案
- 2025全国企业员工全面质量管理知识竞赛题库附答案
- 供应链与贸易安全培训课件
- 严禁燃放烟花炮竹课件
- 宫颈息肉课件
- 人工智能多智能体课件
- 2024年云南地质工程勘察设计研究院有限公司招聘笔试真题及答案
评论
0/150
提交评论