C程序设计_12.ppt_第1页
C程序设计_12.ppt_第2页
C程序设计_12.ppt_第3页
C程序设计_12.ppt_第4页
C程序设计_12.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章C语言概述第二章数据类型 运算符与表达式第三章最简单的C程序设计第四章逻辑运算和判断选取控制第五章循环控制第六章数组第八章编译预处理第九章指针第十章结构体与共用体第十二章文件的基本操作第十三章位运算 第十二章文件的基本操作 12 1文件的基本概念 文件有多种分类 如 按文件的内容区分 源程序 图形文件 音频文件 数据文件等等 按数据的组织形式分 文本文件 二进制文件 C语言可以对文本文件和二进制文件进行读写操作 12 2标准I O和非标准I O 一 标准I O 缓冲文件系统 每一个文件都会在内存开辟一个 缓冲区 缓冲区的作用 临时存放数据 减少对磁盘的读写次数 二 系统I O 非缓冲文件系统 系统不设置缓冲区 由用户设置 系统I O又称为低层文件系统 标准I O与系统I O分别采用不同的输入 输出函数 对文件的操作顺序 打开 读或写 关闭 三 标准I O的读写函数 1 读写一个字符 fgetc fputc 2 读写一个字符串 fgets fputs 3 格式化读写变量 fscanf fprintf 4 格式化读写一个记录 块 fread fwrite 12 3文件类型指针 若要调用文件 系统要求提供以下信息 文件当前的读写位置 与文件对应的内存缓冲区地址 缓冲区中未被处理的字符数 文件的操作方式 对标准I O 系统会在内存为每一个文件开辟一个 文件信息区 存放上面的信息 特别指出 对文件操作所需的 文件信息 是一结构体变量 且该结构体变量由系统定义 定义形式 typedefstruct FILE 存放文件信息 用户只需定义指向文件类型的指针变量即可 如 FILE fp1 fp2 12 4文件的打开与关闭 一 文件打开 使用fopen 函数 调用方式 fopen 文件名 文件操作方式 返回一个指向该文件的指针或错误标志NULL 文件操作方式 r 以只读方式打开一个文本文件 w 以只写方式打开一个文本文件 a 以追加方式打开一个文本文件 r 以读 写方式打开一个文本文件 w 以读 写方式建立一个新的文本文件 a 以读 写方式打开一个文本文件 rb 以只读方式打开一个二进制文件 wb 以只写方式打开一个二进制文件 ab 以追加方式打开一个二进制文件 rb 以读 写方式打开一个二进制文件 wb 以读 写方式建立一个新的二进制文件 ab 以读 写方式打开一个二进制文件 例 include main FILE p p fopen test txt r if p NULL printf fileopenerror exit 0 printf fileopenok 关注的问题 文件 test txt 所在位置如何 在程序结束之前并没有关闭被打开的文件 文件会不会遭到破坏 文件test txt的内容是什么 C语言规定 fopen 函数中的文件名可以是当前工作目录 相对路径 下的也可以是指定路径 绝对路径 下的 如 fopen c DOS config sys r 二 文件关闭 使用fclose 函数 调用方式 fclose 文件指针变量 作用 关闭一个已打开的文件 释放文件信息区 三 文件的读写函数 1 文件结尾标志 EOF 从已打开的文件中读一个字符 fgetc 文件指针变量 返回值 字符 例 设在当前目录下有一个名为gh txt的文件 要求编一程序将该文件中的内容打印在屏幕上 exp15 1 c include main FILE fp fp fopen gh txt r charch if fp NULL printf fileopenerror n else while ch fgetc fp EOF putchar ch fclose fp 注意 gh txt文件必须与该程序的执行文件在同一目录下 2 从已打开的文件中读一字符串 读一行字符 fgets 数组名 n个字符数 文件指针变量 作用 从文件指针所指的文件中读取一行字符 并将读取的字符放入数组中 读取的字符包括换行符 n 或文件结束符 EOF 若读到文件结束标志 函数的返回值为 1 读取的字符后自动加上字符串结束符 0 读到文件尾或出错 则返回NULLfgets 的返回值为数组名 注意 例 exp15 2 c include main FILE fp charw 81 intk 0 fp fopen file txt r if fp NULL printf fileopenerror n else while fgets w 80 fp NULL k k 1 printf s w printf k d k fclose fp 把文件file txt的内容打印到屏幕上 并计算该文件有多少行 3 按指定格式读取变量 fscanf 文件指针变量 格式控制符字符串 变量地址表列 作用 从文件指针所指的文件中按指定的格式 读取变量 并将读取的变量保存到对应的变量中 例 fscanf fp s d f name 有一文件data txt的内容如下 apple304 5 pear203 8 banana252 0 orange302 5 要求将文件的内容按变量的形式取出 例 exp15 3 c include main FILE fp charname 20 intn floatp fp flpen data txt r if fp NULL printf fileopenerrror n else while fscanf fp s d f name n p EOF printf name s tn d tp 6 2f n name n p fclose fp 程序运行结果 name appleu 30p 4 50 name pearu 20p 3 80 name bananau 25p 2 00 name orangeu 30p 2 50 文件的数据格式要求 每个数据用空格分开 若文件中的数据无字符串 则数据可用逗号分开 若文件中的数据是以逗号 分开的 怎样把每个数据读取到变量中 注意 思考 注意 4 向文件中写入一个字符 fputc 字符变量 文件指针变量 作用 把字符变量的值输出到文件指针变量所指的文件中 向文件中写入数据时 若文件不存在 则系统会创建一个新文件 若文件已存在 则 以 w 方式打开文件时 文件原有内容在打开的同时会被冲掉 以 a 方式打开文件时 文件原有内容保留 向文件写入的内容插入到文件的尾部 例 编写一程序 把一字符串写入文件mytest1 txt中 输入时以字符 作为结束 exp15 4 c include main FILE fp charch fp fopen mytest1 txt w if fp NULL printf fileopenerror n else while ch getchar fputc ch fp 运行时输入 5 向文件中写入一个字符串 fputs 数组名 文件指针变量 作用 把数组中的内容 不包括 0 输出到文件指针变量所指的方件中 include exp15 5 c include main FILE fp charw 20 fp fopen mytest2 txt w if fp NULL printf fileopenerror n else while strlen gets w 0 fputs w fp fputs n fp fclose fp 思考 若无此语句 程序的运行结果会是怎样的 怎样结束程序的运行 运行时输入 输入的字符串的长度不要超过数组定义的大小 否则会出错 6 按指定的格式向文件输入数据 fprintf 文件指针变量 格式控制符字符串 变量名表列 作用 将变量表列中的数据按指定的格式输入到文件中 如 fprintf fp d f s a b w 例 exp15 6 c include main FILE fp inta floatb charch w 20 fp foper mystest3 txt w if fp NULL printf fileopenerror n else scanf s w while strlen w 1 scanf d f fprintf fp s 4d 5 1f n w a b scanf s w fclose fp 运行时输入 查看当前目录下的mytest3 txt 使用fgetc fgets fprintf 可以达到同一个目的 12 4按 记录 的方式读写 1 从文件中读 fread buffer size count fp 2 向文件中写a fwerite buffer size count fp 其中 buffer 数据存储的起始地址 size 要读写的字节数 count 读写的数据项 fp 文件指针变量 特点 可对数组 结构体数据进行整体输入输出 返回值 count的值 注意 使用fread fwrite未读写文件时 文件必须以二进制的方式打开 12 5文件的随机读写 前面介绍的几种对文件的读写都是顺序读写 问题的产生 要求打开文件后 对指定位置上的数据进行读写操作 减少一些不心要的中间环节 解决的办法 把文件指针移到指定的位置即可 关键步骤 文件的定位 一 文件定位函数 fseek 文件指针变量 位移量 起始点 注 起始点的取值只有3种 位移量 以起始点为基点移动的字节数 0 文件开始处 1 文件位置指针的当前位置 2 文件尾 位移量应为long型 fseek 的返回值 0 成功 非零 失败 例 fseek fp 20l 0 将位置指针从文件头移动20个字节 fseek fp 10l 1 将位置指针移到离文件尾30个字节处 fseek fp 30l 2 将位置从当前位置向后移10个字节 二 位置函数 ftell 文件指针变量 作用 返回位置指针的当前指向 返回值 0 文件指针的当前指向 1 出错 例 文件data1 txt的内容如下 Thisisatest C语言程序设计 随机读写函数测试 要求编写一程序随机读出指定的记录 三 重新定位函数 rewind 文件指针变量 作用 使文件指针返回到文件的开头 无返回值 exp15 7 c include include main FILE fp intloc1 loc2 longd 8l charw fp fopen data1 txt r if fp NULL printf error n else loc1 fseek fp d 0 if loc1 0 w fgetc fp printf w c n w loc2 ftell fp rewind fp printf loc2 d n loc2 loc2 ftell fp fclose fp printf loc2 d n loc2 运行结果 w a loc2 9 loc2 0 思考 若要采用随机读写的方式读取一个汉字 程序如何修改 提示 一个汉字占2个字节 可使用fgets 函数将要读出的汉字装a数组 读取的字符个数必须为 3的单数 四 文件操作的错误检测 C语言对于大多数标准I O函数不具有明确的出错信息 调用形式 ferror fp 文件指针 返回值 0 未出错 非0 出错 ferror函数的值是最后一次调用时的出错状态 五 文件随机读函数 fread void p intsize intiteams FILE fp 作用 从fp所指定的文件中读取iteams项数据 放到由P所指定的块中 每一项数据的长度为size字节 例 P 332 例9 13 作用 把P所指定的块中size个字节长度的内容作为iteams项数据写到文件 fp中去 fwrite void p intsize intiteams FILE fp 并不是随机写函数 12 6系统I O 低级I O 系统I O的特点 没有文件结构体 不需定义文件类型指针 不能读写单个字符 字符串 格式化数据 只有一种文件读写方法 主要针对二进制文件 编程难度大 执行效率高 缓冲区的大小在程序中设置 是程序的一部分 一 文件打开函数 intopen filename oflag pmode 作用 以aflag的方式打开filename指定的文件 filename 可带有路径的文件名 可用字符串 字符数组名 指向字符串的指针来表示 oflag 文件的打开方式 O RDONLY 打开文件用于只读 O WRONLY 打开文件用于只写 O RDWR 打开文件用于读写 对同一个文件的读写 O APPEND 打开文件准备从文件尾添加 O CREAT 为写而建立一个新文件 若文件已存在 此项无效 pmode 当oflag为O CREAT时 用来规定对新建文件的许可操作方式 S IWRITE只写许可 S IREAD只写许可 S IWRITE IREAD读 写许可 二 读函数 intread handle buf count 作用 从handle所关联的文件中读取count个字节的内容 放到用buf所指定的缓冲区 handle 文件号 buf 缓冲区地址 count 一次可读入的最大字节数 四 移动读写指针 longlseek inthandle longoffest fromwhere 作用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论