C语言程序设计教程第11章北京邮电大学出版社.ppt

上传人:max****ui 文档编号:6333681 上传时间:2020-02-23 格式:PPT 页数:28 大小:293.55KB
返回 下载 相关 举报
C语言程序设计教程第11章北京邮电大学出版社.ppt_第1页
第1页 / 共28页
C语言程序设计教程第11章北京邮电大学出版社.ppt_第2页
第2页 / 共28页
C语言程序设计教程第11章北京邮电大学出版社.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
1 11 1文件概述11 2标准文件操作 第十一章文件 2 在程序运行时 程序本身和数据一般都存放在内存中 当程序运行结束后 存放在内存中的数据被释放 如果需要长期保存程序运行所需的原始数据 或程序运行产生的结果 就必须以文件形式存储到外部存储介质上 一 文件与文件名文件是指存放在外部存储介质上的数据集合 为标识一个文件 每个文件都必须有一个文件名 其一般结构为 主文件名 扩展名 文件命名规则 遵循操作系统的约定 11 1文件概述 3 二 数据文件的存储形式数据文件用于保存数据 其读写往往由应用程序实现 1 字符文件 也称文本文件或正文文件 其数据以字符的形式出现 每个字符用一个ASCII代码 占一个字节 表示 2 二进制文件 以数据在内存中的形式原样存于磁盘 在TurboC中 二进制文件中 整型数用2个字节表示 长整型用4个字节表示 实型数 浮点数 用4个字节 双精度数用8个字节表示 4 例 十进制整数10000 在内存中占两字节 其存放形式是 0010 0111 0001 0000 在二进制文件中也按这中方式存放 占2个字节 在ASCII文件中 存放为31H 30H 30H 30H 30H 占5个字节 它们分别是1 0 0 0 0 0字母的ASCII码 5 比较 字符文件的每1个字节存储1个字符 因而便于对字符进行逐个处理 但一般占用存储空间较多 而且要花费转换时间 二进制与ASCII码之间的转换 二进制文件是把内存中的数据 原样输出到磁盘文件中 可以节省存储空间和转换时间 但1个字节并不对应1个字符 不能直接输出字符形式 6 三 标准文件与非标准文件 1 标准文件系统 利用缓冲区将对磁盘文件进行操作的文件系统称为缓冲 或高层 文件系统 用户使用方便 从内存向磁盘输出数据时 必须首先输出到缓冲区中 待缓冲区装满后 再一起输出到磁盘文件中 从磁盘文件向内存读入数据时 则正好相反 首先将一批数据读入到缓冲区中 再从缓冲区中将数据逐个送到程序数据区 2 非标准文件系统 不使用缓冲区的磁盘文件系统称为非缓冲 或低层 文件系统 编程难度较大 但程序的执行效率高 占用内存资源较少 7 在C语言中 无论是使用标准文件系统还是非标准文件系统 都是利用I O库函数完成文件操作的 8 要调用一个文件 需要有以下的信息 文件当前的读写位置 与该文件对应的内存缓冲区的地址 文件操作方式等1 每个被使用的文件都在内存中开辟一个区 用来存放文件的有关信息 这些信息是保存在一个结构体类型的变量中 该结构体类型是由系统定义的 取名为FILE 2 标准文件系统借助FILE数据结构对文件进行管理 利用文件指针读写文件 每当程序成功打开一个文件 系统就在内存建立一个与该文件对应的FILE结构体变量 并返回该变量的指针 地址 11 2标准文件操作 一 标准文件FILE结构指针 9 3 在程序中定义一个指针变量 用以保存已打开文件所对应的FILE结构在内存的地址 此后用户程序就可用此FILE指针来实现对指定文件的存取操作 定义文件指针变量的一般形式为 FILE 文件结构指针变量名例如 FILE fp 注意 1 只有通过文件指针 才能调用相应的文件 2 对文件操作的库函数 函数原型均在头文件stdio h中 3 文件操作的过程 对磁盘文件的操作必须 先打开 再读写 最后关闭 10 打开 文件的含义 以某中方式从磁盘上查找指定的文件或创建一个新文件 1 文件的打开 fopen 函数形式 FILE fopen char filename char mode filename 文件名 可以包含驱动器 路径 文件名 扩展名 mode 打开方式FILE 返回值1 如果成功打开 返回一个指向被打开文件的文件信息区的起始地址 2 如果打开失败 返回一个NULL指针 二 标准文件的打开操作 11 r 只读 为输入打开一个文本文件 w 只写 为输出打开一个文本文件 a 追加 向文本文件尾增加数据 rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二进制文件 ab 追加 向二进制文件尾增加数据 r 读写 为读 写打开一个文本文件 w 读写 为读 写建立一个新的文本文件 a 读写 为读 写打开一个文本文件 rb 读写 为读 写打开一个二进制文件 wb 读写 为读 写建立一个新的二进制文件 ab 读写 为读 写打开一个二进制文件 2 文件打开方式参数 12 3 在程序开始运行时 系统自动打开以下标准文件 并自动地定义了对应的FILE结构指针变量 13 4 说明 1 用 r 方式打开的文件应该已经存在 如果不存在则打开失败 2 用 w 方式打开的文件 如果不存在该文件 则新建立一个 如果存在该文件 则在打开时将该文件删去 然后重新建立一个新文件 3 如果希望向文件末尾添加新的数据 不希望删除原有数据 则应该用 a 方式打开 4 如果不能实现 打开 的任务 fopen函数的返回值是一个NULL空指针 其值在头文件stdio h中被定义为 14 为增强程序的可靠性 常用下面的方法打开一个文件 if fp fopen 文件名 操作方式 NULL printf cannotopenthisfile n exit 0 关于exit 函数1 用法 voidexit 程序状态值 2 功能 关闭已打开的所有文件 结束程序运行 返回操作系统 并将 程序状态值 返回给操作系统 当 程序状态值 为 时 表示程序正常退出 非 值时 表示程序出错退出 15 三 关闭标准文件 程序对文件的读写操作完成后 必须关闭文件 以保证文件的完整性 格式 fclose 文件指针 1 fclose fp 关闭fp所指的文件 并返回一个整数值 若成功地关闭了文件 则返回一个0值 否则返回一个非零值 2 fcloseall 同时关闭程序中已打开的多个文件 标准设备文件除外 将各文件缓冲区未装满的内容写到相应的文件中去 并释放这些缓冲区 返回关闭文件的数目 16 四 标准文件的读写操作 1 字符读写函数fgetc和fputcintfputc intc FILE fp 把字符c写入fp所指的文件intfgetc FILE fp 从fp所指的文件中读一个字符 返回读得的字符 对于文本文件 遇文件尾时返回EOF 其值在头文件stdio h中被定义为 1 对于二进制文件 用feof fp 判别是否遇文件尾 feof fp 1说明遇文件尾 17 例1 函数fgetc和fputc的使用 include stdio h include conio h main FILE fp1 fp2 charfile1 20 file2 20 charch clrscr printf pleaseinputfile1 sname scanf s file1 fp1 fopen file1 r 18 if fp1 NULL printf cannotopenthisfile n exit 0 printf pleaseinputfile2 sname scanf s file2 fp2 fopen file2 w if fp2 NULL printf cannotopenthisfile n exit 0 ch fgetc fp1 while ch EOF fputc ch fp2 ch fgetc fp1 fclose fp1 fclose fp2 19 2 字符串读写函数fgets和fputs库函数fputs 向fp所指文件输出一个字符串1 用法 intfputs constchar str FILE fp 2 功能 把str写入fp所指的文件 库函数fgets 从文件中读一个字符串1 用法 char fgets char str intn FILE fp 2 功能 从fp所指的文件中读n 1个字节到str str最后一个字节加 0 如果在读入规定长度之前遇到文件尾EOF或换行符 读入即结束 20 例2 函数fputs和fgets的使用 includemain FILE fp char ch1 Howareyou charch2 20 clrscr fp fopen d infile txt w if fp NULL printf cannotopenthisfile n exit 0 fputs ch1 fp rewind fp 用于把文件指针移到文件的开头 fgets ch2 strlen ch 1 fp printf s ch2 21 3 格式化读写函数fscanf和fprintf形式 fprintf 文件指针 格式控制 变量列表 fscanf 文件指针 格式控制 变量地址列表 除增加 文件指针 外 与scanf 和printf 函数的功能相似 例如 inti 3 floatf 9 80 fprintf fp 2d 6 2f i f fprintf 函数的作用是 将变量i按 2d格式 变量f按 6 2f格式 以逗号作分隔符 输出到fp所指向的文件中 3 9 80 表示1个空格 例3 函数fscanf和fprintf的使用 main FILE fpr fpw intj clrscr fpr fopen d creatr txt r fpw fopen d creatw txt w if fpr NULL fpw NULL printf cannotopenfile n exit 0 definenumber3 include includetypedefstruct longnum charname 10 intage student studenttest number for j 0 j number j fscanf fpr ld s d 23 intfwrite void buffer unsignedsize unsignedcount FILE fp 将buffer地址开始的信息 写入count次 每次写size字节至文件fp中 函数返回值等于实际写入的次数 可能少于count typedefstruct longnum charname 10 intage student studentstu 3 for j 0 j number j fwrite stu j sizeof student 1 fp 4 读 写一个数据块fread fwrite 24 intfread void buffer unsignedsize unsignedcount FILE fp 从文件fp中读入count次 每次读size字节 读入的信息存在buffer指针指向的缓冲区 函数返回值等于实际读入的次数 可能少于count typedefstruct longnum charname 10 intage student studenttest 3 作用 按数据项 即数据块 进行操作 通过它们可以方便地对程序中的数组 结构体数据进行整体输入输出 函数操作完成后 将返回读出或写入的数据项项数 for j 0 j number j fread 25 读 写函数的选用原则 从功能角度来说 fread 和fwrite 函数可以完成文件的任何数据读 写操作 但为方便起见 依下列原则选用 1 读 写1个字符 或字节 数据时 选用fgetc 和fputc 函数 2 读 写1个字符串时 选用fgets 和fputs 函数 3 整体读 写结构体或数组时 选用fread 和fwrite 函数 4 读 写1个 或多个 含格式的数据时 选用fscanf 和fprintf 函数 26 文件的操作步骤 1 定义文件指针 FILE 2 建立文件指针和文件名的关系 fopen 3 进行读或写操作 4 关闭文件 fclose 例如 要将文本文件1中字符复制到文件2中 定义内存变量ch和两个文件指针fp1和fp2 反复执行ch fgetc fp1 和fputc ch fp2 语句直到feof fp1 为真止 27 文件中有一个位置指针 指向当前读写的位置 我们可以使用有关函数来改变其位置 以完成文件的随机读写 四 标准文件的定位函数 fseek 函数 调用形式为 fseek 文件类型指针 位移量 起始点 说明 位移量一般是long型数据 起始点用0 1或2表示 函数的作用 是使文件指针移动到所需的位置 若调用成功 返回值为0 否则返回一个非零值 28 例如 fseek fp 20L 0 把文件指针从文件开头移到第20个字节处 fseek fp 20L 2 把文件指针从文件尾向前移动20个字节 ftell 函数 调用形式为 ftell 文件类型指针 函数的作用 得到文件指针离开文件起点的字节数 若调用不成功 返回 1L 表示出错 例如 longi i ftell fp if i 1L printf error n rewind 函数 调用形式为 rewind 文件类型指针 函数的作用 用于把文件指针移到文件的开头 移动成功时 返回值为0 否则返回一个非零值
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!