




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
语言程序设计 理论方法与实践 第2版 C语言程序设计第9章文件程序设计 语言程序设计 理论方法与实践 第2版 第9章文件程序设计 9 1文件概述9 2文件的基本操作9 3文件的其他操作9 4文件应用程序举例 语言程序设计 理论方法与实践 第2版 9 1文件概述 9 1 1文件的概念9 1 2文件的分类9 1 3文件的一般操作过程9 1 4文件类型指针 语言程序设计 理论方法与实践 第2版 9 1 1文件的概念 文件是计算机中的一个重要概念 通常是指存储在外部介质上的信息的集合 在C语言中 所有的外部设备均被作为文件对待 这种文件称为设备文件 计算机对文件的操作总体上分成输入和输出两大类 文件的输人输出 I 0 过程通过操作系统进行管理 C语言程序对文件的处理通过标准函数库中的文件操作函数实现 语言程序设计 理论方法与实践 第2版 9 1 1文件的概念 C语言使用缓冲文件系统在程序和数据外部文件之间交换数据 程序中的数据 如存储在数组 简单变量 结构体变量中的数据等 在写入磁盘文件之前 首先在 输出文件缓冲区 暂存 当该缓冲区数据存满后 再输出到文件中 这一过程称为 写文件 是数据输出过程 写文件 的逆向操作是将文件中的数据装入内存 作为程序处理数据 这一过程称为 读文件 是数据输入过程 当从文件向内存输入数据时 首先把读入的数据输送到 输入文件缓冲区 然后再传送给程序 语言程序设计 理论方法与实践 第2版 9 1 1文件的概念 使用缓冲区的文件读 写示意图 语言程序设计 理论方法与实践 第2版 9 1 2文件的分类 文本文件基于字符编码 是一种字符流文件 C语言源程序文件 用Windows 记事本 程序创建的文件等都是文本文件 最常见的文本文件为ASCII码 每个字符以ASCII码值存储 一个字符就是一个字节 因而方便字符的处理 文本文件一般要占用较大的存储空间 二进制文件基于值编码 按照数据在内存中的字节流存储 为字节流文件 例如C程序的目标文件 扩展名为obj 和可执行文件 扩展名为exe 都是二进制文件 在二进制文件中 字节信息与实际的数据位并不一一对应 因此 若直接显示二进制文件内容时 用户看到的是一些不能识别的字符 文本文件 二进制文件 语言程序设计 理论方法与实践 第2版 9 1 3文件的一般操作过程 使用文件的一般步骤打开文件 操作文件 关闭文件打开文件 建立用户程序与文件的联系 系统为文件开辟文件缓冲区 操作文件 是指对文件的读 写 追加和定位操作 读操作 从文件中读出数据 即将文件中的数据输入到计算机内存 写操作 向文件中写入数据 即将计算机内存中的数据输出到文件 追加操作 将新的数据写到文件原有数据的后面 定位操作 移动文件读写位置指针 关闭文件 切断文件与程序的联系 将文件缓冲区的内容写入磁盘 并释放文件缓冲区 语言程序设计 理论方法与实践 第2版 9 1 4文件类型指针 文件型指针变量的定义FILE 变量名 例如 FILE p 注意 由于文件类型FILE在头文件stdio h中定义 所以在使用FILE类型前必须先打开stdio h文件 如果需要对某一个文件进行读写操作 必须首先要指定指向它的文件指针 只有通过文件指针 才能调用相应的文件 当程序需要同时处理多个文件时 则需要说明多个FILE型的指针变量 使它们分别指向多个不同的文件 语言程序设计 理论方法与实践 第2版 9 2文件的基本操作 9 2 1打开和关闭文件9 2 2文件的字符读写9 2 3文件结束状态测试9 2 4文件的数据块读写 语言程序设计 理论方法与实践 第2版 9 2 1打开和关闭文件 打开文件是使用文件的第一个步骤 关闭文件是使用文件的最后一个步骤 1 文件打开函数fopen 函数的调用方式FILE fp fp fopen 文件名 使用文件的方式 例如 fp example txt r 表示要打开的文件名为example txt 使用文件的方式是 r 方式 文件指针是fp 语言程序设计 理论方法与实践 第2版 9 2 1打开和关闭文件 文件使用方式 语言程序设计 理论方法与实践 第2版 9 2 1打开和关闭文件 2 关闭文件函数fclose fclose 函数的一般格式fclose 文件指针 功能关闭 文件指针 所指向的文件 释放打开文件时使用的结构体变量 断开文件指针与文件的联系 例如 fclose fp 语言程序设计 理论方法与实践 第2版 9 2 2文件的字符读写 1 fputc 函数一般形式fputc ch fp 功能将字符 ch的值 输出到fp所指向的文件中 语言程序设计 理论方法与实践 第2版 9 2 2文件的字符读写 例9 1把从键盘输入的一个字符串写入到磁盘文件example txt中 includeintmain void charch FILE fpfp fopen example txt w printf Enterastring while ch getchar n fputc ch fp fclose fp return0 语言程序设计 理论方法与实践 第2版 9 2 2文件的字符读写 2 fgetc 函数从指定文件读入一个字符 该文件必须是以读或读写方式打开的 通常使用如下的形式调用fgetc 函数ch fgetc fp 其中 fp为文件型指针变量 ch为字符变量 正常情况下fgetc 函数的返回值是从文件中读出的一个字符 当打开文件并立即使用fgetc 读文件时 fgetc 函数从文件开始位置读取一个字符 每读取一个字符后 文件的位置指针后移一个字符位置 若当前读取的是文本文件 当遇到文件结束标志时 fgetc 函数的返回值为EOF 语言程序设计 理论方法与实践 第2版 9 2 2文件的字符读写 例9 2使用fgetc 函数输出文件example txt的内容 includeintmain charch FILE fp fp fopen example txt r while ch fgetc fp EOF putchar ch fclose fp return0 语言程序设计 理论方法与实践 第2版 9 2 3文件结束状态测试 feof 函数是测试文件结束状态的常用函数 不管是文本文件 还是二进制文件 当文件处于结束状态时 若再发生读取文件的操作 则feof 函数的值是一个非0值 否则其值为0 feof 函数的使用格式feof fp 其中fp是文件指针 语言程序设计 第3版 张磊编著高等教育出版社 9 2 3文件结束状态测试 例9 3使用feof 进行文件读取控制 输出文件example txt的内容 include includeintmain void charch FILE fp if fp fopen example txt r NULL printf filecannotopen n exit 1 ch fgetc fp while feof fp putchar ch ch fgetc fp fclose fp return0 当文件位置指针处于文件结尾时 再发生读文件操作时feof 的值将变为非0值 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 文件的数据块读写是指对文件进行读写操作时 一次读写多个数据 C语言提供的操作函数是fread 和fwrite 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fwrite 函数 fwrite 函数功能把内存中的一些数据块写到指定的文件中 一般调用形式fwrite buffer size count fp 其中 fp是接受数据的文件指针 buffer是数据块的内存首地址 通常是指针变量名 数组名等 size是一个数据块的字节数 即数据块的大小 count是执行一次fwrite 函数从内存输出到fp文件的数据块数目 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fwrite 函数 例9 4从键盘输入表8 4学生数据 然后以 stu list 文件名存储到磁盘上 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fwrite 函数 问题分析与算法设计 该问题的关键步骤 以写文件的方式打开stu list文件 从键盘输入数据 将输入的数据写入到stu list文件中 定义一个结构体数组stu 首先将学生数据全部存储到该数组中 将存储在数组stu中的数据一次性写入到stu list文件中 实现程序 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fwrite 函数 include include defineN6structnew stu intnum charname 20 ints1ints2 stu N intmain inti FILE fp if fp fopen stu list wb NULL printf Cannotopenfile n exit 1 for i 0 i N i scanf d s d d 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fread 函数 fread 函数把指定文件中的一个数据块读到内存中 一般调用形式fread buffer size count fp 其中 fp是读取数据的文件指针 buffer是接受文件数据的内存首地址 通常是指针变量名 数组名等 size是一个数据块的字节数 即数据块的大小 count是执行一次fread 函数读取的数据块的数目 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fread 函数 例9 5编写程序 将上述stu list文件的内容显示在屏幕上 问题分析与算法设计 关键步骤 以读文件的方式打开stu list文件 将文件中的数据读出来存储到相应的结构体变量中 将结构体变量中的数据输出 定义与stu list文件中数据类型一致的结构体变量stud 用于存储从文件中读出的结构体数据 使用fread 函数 将stu list文件中的数据读出并存储到stud中 然后输出 实现程序 语言程序设计 理论方法与实践 第2版 9 2 4文件的数据块读写 fwrite 函数 include include defineN6structnew stu intnum charname 20 ints1ints2 stud intmain inti FILE fp if fopen stu list rb NULL printf Cannotopenfile n exit 1 for i 0 i N i fread 语言程序设计 理论方法与实践 第2版 9 3文件的其他操作 9 3 1文件位置指针的定位9 3 2文件的格式化读写9 3 3文件的字符串读写 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 1 fseek 函数功能 改变文件位置指针 调用形式fseek fp offset position 其中 fp为文件型指针 文件位置指针的定位由参数offset和position共同确定 position规定指针定位时的基准位置 offset规定文件位置指针离开基准位置的偏移量 它的单位是字节 position的值用整常数表示 取值范围是0 1 2三个数之一 其意义如下 0 表示基准位置为文件的开头位置 1 表示基准位置为文件的当前位置 2 表示基准位置为文件的结尾位置 该位置在文件内容的最后一个字节之后 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 fseek 函数调用的实例 fseek fp 50L 0 将位置指针移到文件头起始第50个字节处fseek fp 100L 1 将位置指针从当前位置向文件尾方向移动100个字节fseek fp 20L 2 将位置指针从文件末尾向文件头方向移动20个字节 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 例9 6在例9 4中建立了学生数据文件stu list 编写程序修改其中第3个学生的 课程1成绩 的值 修改用数据通过键盘输入 问题分析与算法设计 以读写文件的方式打开文件 使用fseek 函数将文件位置指针定位到第3个记录位置 将第3个记录读出 存储到相应的结构体变量stud中 修改stud中指定成员的数据 将stud中的数据回写到stu list文件中 程序实现 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 include includestructnew stu intnum charname 20 ints1 ints2 stud intmain void intsize FILE fp size sizeof structnew stu if fp fopen stu list rb NULL printf fileopenerror n exit 1 fseek fp 2 size 0 fread 语言程序设计 理论方法与实践 第2版 9 3 2文件位置指针的定位 2 rewind 函数作用 将文件位置指针复位 调用形式rewind fp 其中 fp为文件型指针 执行rewind 函数后 对于fp指向的文件 不管当前的文件位置指针在何处 都使它复位到文件的开始位置 语言程序设计 第3版 张磊编著高等教育出版社 9 3 1文件位置指针的定位 例9 7将文本文件 nature txt 的内容重复显示两次 includeintmain void charch FILE fp fp fopen nature txt r while ch fgetc fp EOF putchar ch rewind fp while ch fgetc fp EOF putchar ch fclose fp return0 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 3 ftell 函数ftell 函数用于获取文件位置指针 其调用形式如下 ftell fp 其中 fp为文件指针 ftell 函数的返回值是fp所指向文件的当前读写位置 该值是一个长整型数 是位置指针从文件开始处到当前位置的位移量的字节数 语言程序设计 理论方法与实践 第2版 9 3 1文件位置指针的定位 例9 8新建data txt文件 检查文件位置指针值 然后将字符串 Beijing2008 写入文件中 再检查文件位置指针的值 include stdio h intmain FILE fp longposition fp fopen data txt w position ftell fp printf position ld n position fprintf fp Beijing2008 position ftell fp printf position ld n position fclose fp return0 语言程序设计 理论方法与实践 第2版 9 3 2文件的格式化读写 1 文件的格式化读操作由fscanf 函数实现 从指定的文件按格式向变量提供数据 一般使用格式fscanf fp 格式字符串 输入表列 其中fp是文件指针 格式字符串 和 输入表列 与scanf 函数的相关内容相同 例如 fscanf fp d 该语句将磁盘文件中的数据送给变量m 其中的磁盘文件由fp指向 语言程序设计 理论方法与实践 第2版 9 3 2文件的格式化读写 2 文件的格式化写操作由fprintf 函数实现 将指定数据按格式写到文件中 一般使用格式fprintf fp 格式字符串 输出表列 说明 fp是要写入数据的文件指针 格式字符串 和 输出表列 与printf 函数的相关内容形同 例如 fprintf fp d m 该语句将整型变量m按 d格式输出到fp指向的文件中 语言程序设计 理论方法与实践 第2版 9 3 2文件的格式化读写 例9 9从键盘输入一个字符串和一个十进制整数 然后再显示在屏幕上 includeintmain void chars 100 inta fscanf stdin s d s 语言程序设计 理论方法与实践 第2版 9 3 3文件的字符串读写 1 fgets 函数一般调用形式fgets buffer n fp 函数功能从fp指向的文件中读取n 1个字符 然后存储到以buffer为首地址的的内存空间中 通常buffer是一个指针变量名 数组名等 如果在读入n 1个字符的过程中遇到换行符或EOF 读入即结束 字符串读入后在最后加一个 0 字符作为字符串结束标志 语言程序设计 理论方法与实践 第2版 9 3 3文件的字符串读写 2 fputs 函数调用形式fputs buffer fp 函数功能将内存buffer中的字符串写到fp指向的文件中 buffer可以是一个字符串常量 也可以是字符串的首地址 语言程序设计 理论方法与实践 第2版 9 3 3文件的字符串读写 例9 10将字符串 VisualC 和 Visualbasic 依次存入文件text中 然后将第一个字符串读出并显示出来 includeintmain FILE fp charstring 20 fp fopen text w fputs VisualC n fp fputs Visualbasic n fp rewind fp fgets string 20 fp puts string fclose fp return0 语言程序设计 理论方法与实践 第2版 9 4文件应用程序举例 文件复制存储在文件中的学生数据排序 语言程序设计 理论方法与实践 第2版 9 4文件应用举例 例9 11设计一个程序 实现任意文本文件的复制 问题分析与算法设计 由于源文件是任意的 所以源文件名应通过键盘输入 同样 生成的目标文件名也应由键盘输入 源文件以只读方式打开 目标文件以写方式打开 从第一个字符开始 顺序逐字符读出源文件 每读出一个字符 立即写入目标文件中 使用feof 函数判断源文件的结束状态 语言程序设计 理论方法与实践 第2版 9 5 1文件复制 实现程序 include includeintmain charch source 20 target 20 FILE fp s fp t scanf s source scanf s target if fp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 融资担保协议书范本
- 房屋托管服务合同
- 2024年南京市第一医院招聘笔试真题
- 平兴学校九年级数学试卷
- 衢州高一数学试卷
- 清溪小学一年级数学试卷
- 红色正能量课件模板
- 七年轻数学试卷
- 南通市八下数学试卷
- 期中高一数学试卷
- 【社会层面】社会主义核心价值观
- 变更风险识别、评估记录表参考模板范本
- 2022年基本公共卫生服务项目宣传工作计划
- 癫痫病人的护理查房ppt课件(PPT 24页)
- DB45T2053-2019 重质碳酸钙单位产品能源消耗限额
- 红金简约风教师退休欢送会PPT通用模板
- 水准点复测记录(自动计算表)
- 有机热载体锅炉安装工程施工方案完整
- 处方点评与案例分析
- 《放射物理与防护》第三章
- 任务1汽车配件识别
评论
0/150
提交评论