




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章文件 时间 1次课 2学时 第十章文件 学习目的与要求 文件是计算机中经常使用的一个重要内容 本章在叙述文件概念的基础上 介绍文件的基本操作和应用 讲解文件操作的基本过程 使读者熟悉c语言中有关文件处理的库函数 建立和使用存储在外部介质上的数据文件 第十章文件 10 1c文件概述10 2文件的打开和关闭10 3文件的读写10 4文件的顺序存取和随机存取10 5文件操作的状态和出错检测10 6上机实训10 7习题 10 1C文件概述 C语言把文件看作是一个字符 字节 的序列 即由一个一个字符 字节 的数据顺序组成 根据数据的组织形式 数据的组织形式是指数据在磁盘上的存储形式 c语言文件可分为两类 ASCII文件 或称文本文件 和二进制文件 在ASCII类的文件中 数据采用ASCII码的形式进行存储 每个字符占用一个字节 这一个字节的数据对应要存储的字符的ASCII码 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放 例如 整型数10000 在内存中存放占2个字节 如按ASCII码形式输出 则占5个字节 而按二进制形式输出 在磁盘上只占2个字节 如图 流式文件 在C语言中 对文件的存取是以字符 字节 为单位的 输入输出的数据的开始和结束仅受程序控制而不受物理符号 如回车换行符 控制 设备文件 在C语言中 把与主机相连的各种外部设备 如显示器 打印机 键盘等外部设备也看作是一个文件 在C语言中 显示器被定义为标准输出文件 键盘被定义为标准输入文件 C语言支持的文件存取方式有两种 顺序存取和随即存取 10 2文件的打开和关闭 10 2 1文件指针 在c语言中 对普通数据文件的所有操作都必须依靠文件类型指针来完成 要想对文件进行操作 首先必须将想要操作的数据文件与文件指针建立联系 然后通过这些文件指针来操作相应的文件 文件类型指针的定义方式 FILE 文件指针变量 例如 FILE fp fp是一个指向FILE类型结构的指针变量 可以使fp指向某一个文件的结构变量 从而通过该结构体变量中的文件信息能够访问该文件 也就是说 通过文件指针变量能够找到与它相关的文件 如果有n个文件 一般应设n个指针变量 使它们分别指向n个文件 以实现对文件的访问 对文件操作要遵循一定的规则 使用文件的一般步骤是 打开文件 操作文件 关闭文件 打开文件 用标准库函数fopen 打开文件 它通知编译系统3个信息 要打开的文件名 使用文件的方式 读还是写等 使用的文件指针 操作文件 是指对文件进行读 写 追加和定位操作 追加操作是指将新数据写到原有数据的后面 定位操作是指移动文件读写位置指针 10 2 2文件的一般操作过程 关闭文件 用标准函数fclose 将文件关闭 它的功能是把数据真正写入磁盘 否则数据可能还在缓冲区中 切断文件指针与文件名之间的联系 释放文件指针 如果不关闭文件 多半会丢失数据 通常 当程序正常运行结束时 系统也会自动关闭所有已打开的文件 10 2 3文件的打开 文件的打开使用fopen 函数 fopen 函数的调用形式为 文件指针变量 fopen 文件名 使用文件方式 其中 文件名是要打开的文件的名字 可以是字符串常数 字符型数组或字符型指针 文件名可带路径 文件正常打开 fopen 函数给指向文件的FILE指针赋值 如果不能打开指定的文件 则返回NULL 例如 FILE fp Fp fopen A dat r 为确保文件操作的正常进行 有必要在程序中检测文件是否正常打开 即操作是否成功 常用下面的程序段来打开文件 if fp fopen fname w NULL printf cannotopenfile exit 1 即当文件不能正常打开时 屏幕显示 cannotopenfile 程序运行终止 返回操作系统 若文件成功打开 程序就可以继续往下运行 设备文件的标准输入文件 键盘 stdin 标准输出文件 显示器 stdout和标准出错输出 出错信息 stderr是由系统打开的 在使用的时候不需要调用fopen函数打开 可以直接使用 10 2 4文件的关闭 文件使用完毕后 应当关闭 这需要释放文件指针 文件被关闭后 就不能再对该文件进行操作 用fclose函数关闭文件 fclose 函数的调用形式为 fclose 文件指针 fclose函数用于关闭使用fopen函数打开的文件 并释放文件指针 例如 fclose fp fp一定是fopen函数打开的文件指针 文件被正常关闭时 fclose函数返回值为0 否则返回一个非0值 表示关闭出错 10 3文件的读写 一个文件打开后 就可以对该文件进行读写 C语言用编译系统提供的文件输入输出函数实施文件的读写 这些输入输出函数针对不同的数据对象 采用不同的数据格式 文本文件也称为ASCII文件 在ASCII类的文件中 数据采用ASCII码的形式进行存储 每个字符占用一个字节 这一个字节的数据对应要存储的字符的ASCII码 用于文本文件读写的函数有 字符输入输出函数fgetc和fputc字符串输入输出函数fgets和fputs格式化输入输出函数fscanf和fprintf 10 3 1文本文件的读写函数 1 字符输入输出函数fgetc和fputc字符输出函数fputcfputc函数的调用形式为 fputc 字符表达式 文件指针 其中字符表达式是要输出的字符 可为字符常量或字符变量 文件指针指向要存入数据的文件 fputc函数的功能是将一个字符输出到指定文件中 即将字符表达式的字符输出到文件指针所指向的文件 若输出操作成功 该函数返回输出的字符 否则返回EOF 例10 1从键盘输入一字符串 并逐个将字符串的每个字符传送到磁盘文件A dat中 当输入的字符为 时停止输入 includevoidmain FILE fp 指向磁盘文件的指针 charch 暂存读入字符的字符变量 if fp fopen A dat w NULL 以写的方式打开文本文件A dat并判断是否能正常打开 printf cannotopenfile n 不能正常打开磁盘文件的处理 exit 0 调用exit函数终止程序运行 while ch getchar 判断输入的是否为结束输入标志 fputc ch fp 读入的字符写入磁盘文件 fclose fp 操作结束关闭磁盘文件 字符输入函数fgetcfgetc函数的调用形式为 fgetc 文件指针 fgetc函数的功能是从文件指针指定的文件中读入一个字符 该字符的ASCII码值作为函数的返回值 若读取字符时文件已经结束或出错 fputc函数返回文件结束标记EOF 此时EOF的值为 1 例如 ch fgetc fp 是从fp指定的文件中读一个字符并把该字符赋给ch ch是字符变量 例10 2将例10 1中建立的文件A dat的内容在屏幕上显示 includevoidmain FILE fp 指向磁盘文件的指针 charch 暂存读入字符的字符变量 if fp fopen A dat r NULL 以读的方式打开文本文件A dat并判断是否能正常打开 printf cannotopenfile n 不能正常打开磁盘文件的处理 exit 0 调用exit函数终止程序运行 while ch fgetc fp EOF 判断文件是否结束 putchar ch 读入的字符在屏幕上显示 fclose fp 操作结束关闭磁盘文件 例10 3编程完成文本文件的复制 includevoidmain FILE fp1 fp2 charfile1 20 file2 20 ch printf Enterfilename1 scanf s file1 printf Enterfilename2 scanf s file2 if fp1 fopen file1 r NULL 以只读方式打开文本文件file1 printf file1openerror n exit 0 if fp2 fopen file2 w NULL 以写方式打开文本文件file2 printf file2openerror n exit 0 while ch fgetc fp1 EOF 从文件fp1中读字符 fputc ch fp2 写入文件fp2中 fclose fp1 关闭两个文件 fclose fp2 2 字符串输入输出函数fgets和fputsfgets函数的调用形式为 fgets 字符数组名 n 文件指针 其中 n是一个正整数 函数的功能是从指定的文件中读入n 1个字符 然后在最后加一个 0 字符 因此得到的字符串共有n个字符 把它们放到字符数组中 如果在读完n 1个字符之前遇到换行符或EOF 读入即结束 fgets函数返回值为字符数组的首地址 fputs函数的调用形式为 fputs 字符串 文件指针 其中 字符串可以是字符串常量 也可以是字符数组名或指针变量 函数的功能是向指定的文件输出一个字符串 3 格式化输入输出函数fscanf和fprintffscanf函数的调用形式为 fscanf 文件指针 格式控制字符串 输入表列 其中 文件指针指向将要读取数据的文件 格式控制字符串和输入表列的内容 含义及对应关系与scanf函数相同 fscanf函数的功能是从fp指向的文件中 按格式控制字符串读取相应数据赋给输入列表中的对应变量 fprintf函数的调用形式为 fprintf 文件指针 格式控制字符串 输出表列 其中 文件指针指向将要写入数据的文件 格式控制字符串和输入表列的内容 含义及对应关系与printf函数相同 fprintf函数的功能是将输出列表中的各个变量或常量 依次按格式控制字符串说明的格式写入fp指向的文件 该函数调用的返回值是实际输出的字符数 10 3 2二进制文件的读写函数 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放 用于二进制文件读写的函数主要是fread和fwrite函数 另外 fget fput fgets fputs也可用于二进制文件的读写 1 fread函数和fwrite函数fread和fwrite两个函数用于对整块数据的写和读 做写操作时 整块数据要事先放在内存中 例如 存放在一个数组中 或是存放在一个结构变量中 还可以存放在一个结构数组中 而做读操作时 要准备好接收数据的存储空间 存储空间的数据类型可以是数组 结构变量或结构数组等 文件数据块读函数freadfread函数的调用形式为 fread buffer size count fp 其中 buffer是一个指针 是指向输入数据存放在内存区的起始地址 size是要输入的字节数 count是要输入大小为size个字节的数据块的个数 fp是文件指针 fread函数的功能是对fp所指向的文件读取count次 每次读取一个大小为size的数据块 将读取的各数据块存到buffer指向的内存区 该函数的返回值是实际读取的count值 文件数据块写函数fwritefwrite函数的调用形式为 fwrite buffer size count fp fwrite函数的参数及其功能与fread函数类似 只是对文件的操作而言是互逆的 一个是读取 一个是写入 例10 6从键盘输入3个学生的数据 将它们存入文件student 然后再从文件中读出数据 显示在屏幕上 include defineSIZE3structstudent type 定义结构 charname 10 intnum intage charaddr 30 stud SIZE out voidsave FILE fp inti if fp fopen student wb NULL 以二进制写方式打开文件 printf Cannotopenfile n 打开文件的出错处理 exit 1 出错后返回 停止运行 for i 0 i SIZE i 将学生的信息 结构 以数据块形式写入文件 if fwrite 关闭文件 main FILE fp inti for i 0 i SIZE i 从键盘读入学生的信息 结构 printf Inputstudent d i 1 scanf s d d s stud i name 关闭文件 在程序设计中 对文件的读写又称为对文件的存取 文件的存取方式有两种 顺序存取和随机存取 10 4文件的顺序存取和随机存取 10 4 1文件定位操作 文件中有一个位置指针 指向当前读写的位置 如果顺序读写一个文件 每次读写一个字符 则读写完一个字符后 该位置指针自动移动指向下一个字符位置 用程序控制文件内部位置指针的移动 称为文件的定位 在c语言中 文件的定位操作也是通过库函数实现的 实现文件定位操作的函数主要有 fseek函数 rewind函数和ftell函数 1 改变文件位置指针函数fseekfseek函数的调用形式为 fseek fp offset position 其中fp为文件指针 position为起始点 指出以文件的什么位置为基准进行移动 position的值用整型常量表示 ANSIC允许它有下列三个值之一 0 文件的开头 1 文件的当前位置 2 文件的末尾 Offset为位移量 指从起始点position到要确定的新位置的字节数 也就是以起点为基准 向前移动的字节数 ANSIC要求该参数为长整形量 fseek函数的功能是将文件fp的读写位置指针移到离开起始位置 position 的offset个字节处的位置 如果函数读写指针移动失败 返回值为 1 2 位置指针重返文件头函数rewindrewind函数的调用形式为 rewind 文件指针 其功能是把文件内部的位置指针移到文件的开头 3 位置指针当前值函数ftellftell函数的调用形式为 ftell 文件指针 其功能为得到文件指针所指文件的当前读写位置 即位置指针的当前值 该值是一个长整型数 是位置指针从文件开始处到当前位置的位移量的字节数 如果函数的返回值为 1L 表示出错 顺序存取的特点是对文件的读写方式都是从文件的开始到文件的结束 读 写了第一个字节 才能读 写第二个字节 依次类推 如果想读写文件的最后一个字节 必须先读写完该字节前面的所有字节 我们前面编写的所有程序都使用的是顺序存取方式 顺序存取的位置由文件内部位置指针自动确定 不用在程序中控制文件内部位置指针的内容 10 4 2文件的顺序存取 随机存取的特点是允许从文件的任何位置开始读写操作 文件操作的位置可以由程序控制 对于存储在磁带上的文件 由于磁带的硬件特性 只能顺序读写各个数据 而对于存储在磁盘上的文件 即可以采取顺序存取方式 也可以采取随机存取方式对文件内容进行读写操作 随机存取文件的位置 可以由程序改变文件内部位置指针的内容 使其指向需要读写的位置 然后再进行读写操作 这就要用到文件定位的函数 10 4 3文件的随机存取 10 5文件操作的状态和出错检测 c语言函数库提供了对文件操作状态和操作出错的检测函数 这些检测函数包括 feof ferror和clearerr函数 10 5 1文件状态检测函数feof feof函数的调用形式为 feof 文件指针 函数feof的功能是测试文件指针所指的文件的位置指针是否已到达文件尾 文件是否结束 如果已到达文件尾 则函数返回非0值 否则返回0 表示文件尚未结束 ferror函数函数的调用形式为 ferror 文件指针 函数ferror的功能是测试文件指针所指的文件是否有错误 如果没有错误 返回值为0 否则 返回一个非0值 表示出错 10 5 2报告文件操作错误函数ferror 10 5 2报告文件操作错误函数ferror ferror函数函数的调用形式为 ferror 文件指针 函数ferror的功能是测试文件指针所指的文件是否有错误 如果没有错误 返回值为0 否则 返回一个非0值 表示出错 10 5 3清除错误标志函数clearerr clearerr函数函数的调用形式为 clearerr 文件指针 函数clearerr的功能是清除文件指针所指的文件的错误标志 即将文件错误标志和文件结束标记置为0 10 6上机实训 实验目的掌握文件 文件缓冲系统 文件指针等基本概念 掌握文件的基本操作方法及文件操作库函数的使用 包括文本文件和二进制文件的打开与关闭操作函数 读写操作函数 文件操作的状态和出错检测函数 实验内容编写程序并上机调试运行 磁盘中有一个保存学生成绩的文本文件file txt 文件中包括学生的学号 姓名和成绩 现要求按照学生的成绩从高到低进行排序 将排序结果显示在屏幕上 并输出到文件fileout txt中 假设 学生成绩文件file txt的格式和内容如下 20060001WangQing9820060002ZhangFan8520060003LiXin8920060004WangFei7620060005ZhongNing7820060006ChenHong81 实验要求首先用TurboC编辑器或记事本编写一个文本文件file txt保存到磁盘中 然后再编写程序 要读入数据的文件名和要输出数据的文件名在程序运行时由用户从键盘输入 使用链表 从文件file txt中将学生信息读入链表中 边读入边排序 然后将链表中的有序的学生信息存入文件fileout txt中 实验总结通过本章的上机实训 学员应该能够掌握文件的基本操作方法及文件操作库函数的使用 掌握在程序中使用文件来保存程序数据的解决实际问题的方法 进一步提高编写程序的能力 10 7习题 1单项选择题 1 在进行文件操作时 写文件的一般含义是 A将计算机内存中的信息存入磁盘B将磁盘中的信息存入计算机内存C将计算机CPU中的信息存入磁盘D将磁盘中的信息存入计算机CPU 2 C语言中标准输入文件stdin是指 A键盘B显示器C鼠标D硬盘 3 系统的标准输出文件stdout是指 A键盘B显示器C软盘D硬盘 4 在高级语言中对文件操作的一般步骤是 A打开文件 操作文件 关闭文件B操作文件 修改文件 关闭文件C读写文件 打开文件 关闭文件D读文件 写文件 关闭文件 5 要打开一个已经存在的非空文件 file 用于修改 正确的语句是 Afp fopen file r Bfp fopen file a Cfp fopen file w Dfp fopen file r 6 若执行fopen函数是发生错误 则函数的返回值是 A地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神经调节机制与功能解析
- 日出人物形象分析讲解
- 实践技能2025年执业医师考试试题及答案
- 2025年安全培训试题及完整答案(各地真题)
- 安全员a证考试试题及正确答案
- 我的花被子讲解版
- 项目档案竣工汇报
- 人防钢筋施工技术
- 《急性肺栓塞诊断和治疗指南2025》解读
- 小梵高创意汇报
- 2025年中国钒催化剂行业市场前景预测及投资价值评估分析报告
- (高清版)DGJ 08-100-2003 低压用户电气装置规程
- 江苏省无锡市江阴市六校2024-2025学年高一下学期4月期中联考试题 物理 含答案
- 医保人员管理制度
- 2025高中数学教师课标考试模拟试卷及答案(五套)
- 客运专线铁路四电工程监理实施详尽细则
- 电厂化学水处理知识课件教学
- 2025年中医经典知识竞赛考试题库及答案
- 2025至2030年中国氟聚合物行业市场行情动态及发展趋向分析报告
- 初级消防设施操作员资格历年考试真题试题库(含答案)
- 炼钢厂环保知识培训课件
评论
0/150
提交评论