




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 1 学过的文件库函数 char fgets char s intn FILE fp intfputs char s FILE fp FILE fopen 文件名 操作方式 intfclose FILE fp intfputc intc FILE fp intfgetc FILE fp intfeof FILE fp 两个特殊的标识符FILE文件类型名EOF文件结束符号常数 1 2 2 拓展利用命令行参数 编写实现文件拷贝软件 3 3 复习 命令行参数 main 可以是有参的函数 程序运行时通过命令行向其传递参数 main intargc char argv argc的值为程序执行时参数的数目 包括命令本身 argv i 为指向第i个参数的字符指针argv 0 指向 命令名 第一个 字符串argv 1 指向第二个字符串argv 2 指向第三个字符串 D mycopyfirst txtsecond txt argc值为3 4 4 例 演示命令行参数 include includevoidcopyfile char f1 char f2 intmain intargc char argv printf Theprogramnameis s n argv 0 if argc 3 copyfile argv 1 argv 2 printf n文件复制成功 elseprintf n命令行输入不符合要求 getchar return1 5 5 voidcopyfile char f1 char f2 charch FILE fp1 fp2 fp1 fopen f1 r if fp1 NULL printf 打不开文件 n exit 1 fp2 fopen f2 w if fp2 NULL printf 打不开文件 n exit 1 while ch fgetc fp1 EOF fputc ch fp2 fclose fp1 fclose fp2 fputc n stdout 6 6 二进制文件数据块的读 写 7 7 读 写一个数据块 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是存放读入数据的起始地址 即存放何处 fwrite 从buffer开始 一次输出size个字节 重复count次 并将输出的数据存放到fp所指向的文件中 同时 将读写位置指针向前移动size count个字节 其中 buffer是要输出数据在内存中的起始地址 即从何处开始输出 如果调用fread 或fwrite 成功 则函数返回值等于count 否则为0 fread 和fwrite 函数 一般用于二进制文件的处理 8 8 例4将4个学生数据 转存到磁盘文件中去 再从文件读出显示到屏幕上 分析 构思 1 建立学生信息的结构体 2 定义文件指针 3 定义结构体数组并初始化 为方便调试而作 4 将学生信息写入文件 写完后关闭该文件 编写函数 5 再次打开该文件 读出所有学生信息 读完后关闭该文件 编写函数 6 显示学生信息到屏幕上 编写函数 typedefstructstudent charname 10 intnum intage StudType 定义结构体voidmain StudTypestud 10 大师兄 201008 18 二师兄 201009 19 三师弟 201010 10 初始数据StudTyperesult stud 10 存放读入的数据intn 存放返回值if save stud 3 0 printf saveerror 写入文件if n readfile result stud 0 printf readerror 读入display result stud n 显示读出的数据 intsave StudTypestud intn intreadfile StudTypestud voiddisplay StudTypestud intn 9 9 intsave StudTypestud intn FILE fp intcount fp fopen student dat wb if fp NULL printf 打不开文件 n exit 1 count fwrite stud sizeof StudType n fp if count 0 printf 写操作错误 n fclose fp returncount 10 10 intreadfile StudTypestud FILE fp intn fp fopen student dat rb if fp NULL printf 打不开文件 n exit 1 n fread stud sizeof StudType 3 fp if n 0 printf 读操作错误 n fclose fp returnn 11 11 voiddisplay StudTypestud intn inti for i 0 i n i printf 10s 4d 4d n stud i name stud i num stud i age printf n n 12 12 课堂练习 在以上设计的基础上 再编写一个函数实现追加一个学生记录到文件中 intaddfile StudTypestud 以 追加 方式打开文件 写文件 关闭文件 13 13 对文件进行格式化读 写 fscanf 和fprintf 函数 与scanf 和printf 函数的功能相似 区别在于 fscanf 和fprintf 函数的操作对象是指定文件 而scanf 和printf 函数的操作对象是标准输入 stdin 输出 stdout 文件 intfprintf 文件指针 格式字符串 输出表列 intfscanf 文件指针 格式字符串 输入表列 功能 按格式对文件进行I O操作返值 成功 返回I O的个数 出错或文件尾 返回EOF 例如 inti 3 floatf 9 80 fprintf fp 2d 6 2f i f fprintf 函数的作用是 将变量i按 2d格式 变量f按 6 2f格式 以逗号作分隔符 输出到fp所指向的文件中 3 9 80 表示1个空格 14 14 读 写函数的选用原则 从功能角度来说 fread 和fwrite 函数可以完成文件的任何数据读 写操作 但为方便起见 依下列原则选用 1 读 写一个字符 或字节 数据时 选用fgetc 和fputc 函数 2 读 写一个字符串时 选用fgets 和fputs 函数 3 读 写一个 或多个 不含格式的数据时 选用fread 和fwrite 函数 4 读 写一个 或多个 含格式的数据时 选用fscanf 和fprintf 函数 15 15 位置指针与文件定位 FILE中有一个读写位置指针 指向当前的读写位置 每次读写一个 或一组 数据后 系统自动将位置指针移动到下一个读写位置上 读写方式顺序读写 位置指针按字节位置顺序移动随机读写 位置指针按需要移动到任意位置位置指针复位函数rewind 1 用法 voidrewind 文件指针 2 功能 使文件的位置指针返回到文件头 16 16 fseek 函数1 用法 intfseek 文件指针 位移量 参照点 intfseek FILE fp longintoffset intwhence 2 功能 将指定文件的位置指针 从参照点开始 移动指定的字节数 1 参照点 用0 文件头 1 当前位置 和 文件尾 表示 在ANSIC标准中 还规定了下面的名字 SEEK SET 文件头 SEEK CUR 当前位置 SEEK END 文件尾 2 位移量 以参照点为起点 正向偏移 当位移量 时 或负向偏移 当位移量 时 的字节数 位移量一般被要求是long型数据 3 返值 成功为0 失败为非0 fseek 函数一般用于二进制文件 17 17 fseek函数调用的几个例子 fseek fp 100L SEEK SET 将指针从文件头正向移动100个字节fseek fp 50L SEEK CUR 将位置指针从当前位置正向移动50个字节fseek fp 10L SEEK END 将位置指针从文件末尾处负向偏移10个字节 18 18 返回文件当前位置的函数ftell 由于文件的位置指针可以任意移动 也经常移动 往往容易迷失当前位置 ftell 就可以解决这个问题 1 用法 longintftell 文件指针 2 功能 返回文件位置指针的当前位置 用相对于文件头的位移量表示 如果返回值为 1L 则表明调用出错 例如 offset ftell fp if offset 1L printf ftell error n 19 19 例5磁盘文件上有3个学生数据 要求读入第2学生数据并显示 includestructstudent type charname 10 intnum intage stud 定义结构体变量voidmain inti 0 FILE fp if fp fopen student dat rb NULL 打开文件 printf can topenfile n exit 1 rewind fp 定位在文件头fseek fp 1 sizeof structstudent type SEEK SET 从文件头开始移动一个记录fread 20 20 出错检测 ferror 函数在调用输入输出库函数时 如果出错 除了函数返回值有所反映外 也可利用ferror 函数来检测 1 用法 intferror 文件指针 2 功能 如果函数返回值为0 表示未出错 如果返回一个非0值 表示出错 1 对同一文件 每次调用输入输出函数均产生一个新的ferror
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年家教签合同协议书
- 2025年花艺布展协议书
- 2025年临时员工契约协议书
- (2025年标准)私下配送免责协议书
- 2025年代运营维护协议书
- 2025年新欠钱不还开车协议书
- (2025年标准)外聘老师协议书
- 2025年新特殊墙体安装协议书
- 购置车位合同(标准版)
- (2025年标准)租车打广告协议书
- 红楼梦之林黛玉
- 化学(基础模块)中职PPT完整全套教学课件
- 京东集团员工手册-京东
- 成人癌性疼痛护理-中华护理学会团体标准2019
- 初中语文学习方法指导
- 2023年苏州市星海实验中学小升初分班考试数学模拟试卷及答案解析
- GB/T 23483-2009建筑物围护结构传热系数及采暖供热量检测方法
- GB/T 22237-2008表面活性剂表面张力的测定
- 股指期权风险管理
- 《电业安全工作规程》
- 发证机关所在地区代码表
评论
0/150
提交评论