《C语言程序设计教程》PPT课件_第1页
《C语言程序设计教程》PPT课件_第2页
《C语言程序设计教程》PPT课件_第3页
《C语言程序设计教程》PPT课件_第4页
《C语言程序设计教程》PPT课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1 C语言程序设计 北京科技大学计算机系 第10章文件 2 第10章文件 10 1文件的概念10 2文本文件的读写10 3二进制文件的读写 3 文件 存储在外部存储介质上相关数据的集合 例如 程序文件中保存着程序 数据文件中保存着数据 CC语言的源程序文本文件 OBJ目标文件二进制文件 EXE可执行文件二进制文件文件的存储特性文件是一个有序的数据序列 C语言把文件作为一个字符 字节 序列处理 对文件的存取是以字符 字节 为单位进行的 10 1文件的概述 10 1 1文件和文件指针 1 什么是文件 4 设备文件在C语言中 文件 的概念被进一步扩大 把每台与主机相连的输入输出设备都看作是一个文件 即把实际的物理设备抽象为逻辑文件 它们被称为设备文件 对外部设备的输入输出就是对设备文件的读写 10 1文件的概述 10 1 1文件和文件指针 1 什么是文件 5 按文件存储数据的形式 ASCII文件 或称文本文件 ASCII码文件中每个字节存放一个ASCII代码 代表一个字符 此种存储形式便于输出显示 在DOS操作系统下可以直接阅读 二进制文件二进制文件中的数据是按照在内存中的二进制存储格式存放的 此种存储形式节省存储单元 二进制文件在DOS操作系统下不能直接阅读 10 1文件的概述 10 1 1文件和文件指针 2 文件的种类 6 例如将整数1949分别存储在这两种数据文件中 ASCII文件 ASCII码 二进制文件 补码 占用4个字节 占用2个字节 10 1文件的概述 10 1 1文件和文件指针 2 文件的种类 7 按照对文件的处理方式 缓冲文件利用缓冲文件系统处理的文件称为缓冲文件 系统处理方法是在内存中为每个正在使用的缓冲文件开辟一个缓冲区 其大小是512个字节 对文件读写数据都通过缓冲区进行 非缓冲文件利用非缓冲文件系统处理的文件称为非缓冲文件 系统处理非缓冲文件时 不为文件开辟缓冲区 需要程序员自行设计并管理缓冲区 83年以后ANSIC标准中取消了非缓冲文件系统 对文本文件和二进制文件均采用缓冲文件系统进行处理 10 1文件的概述 10 1 1文件和文件指针 2 文件的种类 8 系统对文件的处理过程就是对文件进行输入 输出操作的过程 从文件读数据时 先一次性从磁盘文件中读取一批数据到缓冲区 然后再从缓冲区逐个将数据送入变量 向文件写数据时 也是先将变量中数据送到缓冲区 待缓冲区装满后 再一起存到磁盘文件中 10 1文件的概述 10 1 1文件和文件指针 3 缓冲文件和文件指针 9 10 1文件的概述 10 1 1文件和文件指针 3 缓冲文件和文件指针 文件类型指针在缓冲文件系统中 对每个正在使用的文件都自动分配一个FILE类型的结构体变量 用于存放文件的有关信息 如文件号 文件状态 缓冲区地址和大小等 FILE类型是系统定义的 包含在stdio h头文件中 在C语言中 无论对磁盘文件还是设备文件的读 写都要通过FILE类型的结构体变量进行 因此对于每个使用中的磁盘文件必须先定义一个FILE类型的文件指针变量并指向此变量 FILE 文件指针变量名 typedefstruct shortlevel fill emptylevelofbuffer unsignedflags Filestatusflags charfd Filedescriptor unsignedcharhold Ungetccharifnobuffer shortbsize Buffersize unsignedchar buffer Datatransferbuffer unsignedchar curp Currentactivepointer unsignedistemp Temporaryfileindicator shorttoken Usedforvaliditychecking FILE ThisistheFILEobject 10 标准文件是外部设备中的三个特殊的设备文件 它们的文件指针是系统定义的 并由系统自动打开和关闭 这三个标准文件分别是 标准输入文件 文件指针为stdin 系统指定为键盘 标准输出文件 文件指针为stdout 系统指定为显示器 标准错误输出文件 文件指针为stderr 系统指定为显示器 输出错误信息 10 1文件的概述 10 1 1文件和文件指针 4 标准文件 11 10 1文件的概述 10 1 2文件的打开与关闭 操作文件的一般步骤打开文件 读写文件 关闭文件 打开文件 建立用户程序与文件的联系 为文件分配一个文件缓冲区 读写文件 是指对文件的读 写 追加和定位操作 关闭文件 切断文件与程序的联系 释放文件缓冲区 C语言的输入输出函数库中提供了大量的函数 用于完成对数据文件的建立 数据的读写 数据的追加等操作 在程序中调用这些函数时 必须先用include命令包含stdio h文件 12 常用的调用形式 FILE fp fp fopen 文件名 文件使用方式 文件名 需要打开的文件名称 字符串 文件使用方式 是具有特定含义的符号 10 1文件的概述 10 1 2文件的打开与关闭 1 文件打开函数fopen 函数功能 按指定的文件使用方式打开指定的文件 若文件打开成功 为该文件分配一个文件缓冲区和一个FILE类型变量 返回一个FILE类型指针 若文件打开失败 返回NULL 13 文本文件的三种基本使用方式 r 只读方式为读 输入 文本文件打开文件 若文件不存在 返回NULL w 只写方式为写 输出 文本文件打开文件 若文件不存在 则建立一个新文件 若文件已存在 则清空文件 a 追加方式为写 输出 文本文件打开文件 若文件已存在 则保持原来文件的内容 将新的数据增加到原来数据的后面 若文件不存在 则返回NULL 10 1文件的概述 10 1 2文件的打开与关闭 14 二进制文件的三种基本使用方式 rb 只读方式为读 输入 二进制文件打开文件 若文件不存在 返回NULL wb 只写方式为写 输出 二进制文件打开文件 若文件不存在 则建立一个新文件 若文件已存在 则清空文件 ab 追加方式为写 输出 二进制文件打开文件 若文件已存在 则保持原来文件的内容 将新的数据增加到原来数据的后面 若文件不存在 则返回NULL 10 1文件的概述 10 1 2文件的打开与关闭 15 10 1文件的概述 10 1 2文件的打开与关闭 文件的其他打开方式 r 可以对文本文件进行读 写操作 若文件不存在返回NULL 若文件存在内容不被清空 w 可以对文本文件进行读 写操作 若文件已经存在 则先清空文件原来的内容 a 可以对文本文件进行读 追加操作 文件内容不会清空 rb 可以对二进制文件进行读 写操作 wb 可以对二进制文件进行读 写操作 ab 可以对二进制文件进行读 追加操作 16 检查文件打开操作是否成功if fp fopen filename r NULL printf Cannotopenfile n exit 0 检查以只读方式打开文件名为filename的文件是否成功 exit函数的作用 结束程序的执行 并将实参0作为函数返回值传给操作系统 10 1文件的概述 10 1 2文件的打开与关闭 17 常用的调用形式 FILE fp fclose fp fp 已经打开的文件指针 10 1文件的概述 10 1 2文件的打开与关闭 2 文件关闭函数fclose 函数功能 关闭fp指定的文件 释放该文件的缓冲区 FILE类型变量及文件指针 若文件关闭成功 则返回0 若文件关闭失败 则返回非0值 18 常用的调用形式 FILE fp fputc ch fp ch 需要输出的字符 可以是字符常量或字符变量 fp 文件指针变量 对文本文件的读写操作 必须按文件中字符的先后顺序进行 只能在操作了第i个字符之后 才能操作第i 1个字符 在对文件操作时 文件的读写指针由系统自动向后移动 10 2文本文件的读写 10 2 1文件的字符输入输出函数 1 字符输出函数fputc 或putc 函数功能 将一个字符 ASCII码 写入到fp所指向的文件 该文件必须是以写或读写方式打开的 中 若输出操作成功 函数返回写入的字符 否则 返回EOF 系统定义的文本文件结束标志 其值为 1 putc函数与fputc函数的功能相同 在stdio h文件中被定义为 defineputc c f fputc c f 标准文件中用的putchar函数是fputc函数的特殊用法 它在stdio h文件中被定义为 defineputchar c putc c stdout 19 常用的调用形式 FILE fp ch fgetc fp ch 可以是字符变量或整型变量 fp 文件指针变量 10 2文本文件的读写 10 2 1文件的字符输入输出函数 2 字符输入函数fgetc 或getc 函数功能 从fp所指向的文件 该文件必须是以读或读写方式打开的 中读取一个字符 若输入操作成功 函数返回读入的字符 若文件结束或输入操作失败 则返回EOF getc函数与fgetc函数的功能相同 在stdio h文件中被定义为 definegetc f fgetc f 标准文件中用的getchar函数是fgetc函数的特殊用法 它在stdio h文件中被定义为 definegetchar getc stdin 20 例10 1 利用fputc和fgetc函数建立一个文本文件 并显示文件中的内容 includemain FILE fp 定义一个文件指针变量fp intc c为存放字符的变量 charfilename 40 filename用于存放数据文件名 printf filename 提示输入磁盘文件名 gets filename if fp fopen filename w NULL printf Can topenthe s n filename exit 0 10 2文本文件的读写 10 2 1文件的字符输入输出函数 测试打开文件是否成功 21 while c getchar EOF 键盘文件结束标志 输入Ctrl z 显示 Z后回车 putc c fp 将键盘输入的字符写到文件中 fclose fp 建立文件结束 关闭文件 printf outfile n fp fopen filename r 以读方式打开文本文件 while c getc fp EOF 未读到文件结束标志时 putchar c 在显示器显示读出的字符 fclose fp 读文件结束 关闭文件 10 2文本文件的读写 10 2 1文件的字符输入输出函数 22 常用的调用形式 FILE fp feof fp fp 文件指针变量 10 2文本文件的读写 10 2 2文件结束测试函数 函数功能 测试fp所指向的文件是否已读到文件尾部 若该文件没有结束 则返回0 若文件结束 则返回非0值 对文本文件进行读操作时 例如fgetc 返回EOF 即可作文件结束处理 但在二进制文件中 1是合法数据 所以系统提供了一个适用对象更普遍的文件结束测试函数feof 23 例如 复制一个磁盘文件 includemain FILE infp outfp charinfile 40 outfile 40 intch printf inputfilename scanf s infile printf outputfilename scanf s outfile if infp fopen infile r NULL 打开源文件 printf infileopenerror n exit 0 if outfp fopen outfile w NULL 打开目标文件 printf outfileopenerror n exit 0 ch fgetc infp 从源文件中读一个字符 while feof infp 源文件未读完 fputc ch outfp ch fgetc infp 复制文件 fclose infp fclose outfp 10 2文本文件的读写 10 2 2文件结束测试函数 24 常用的调用形式 FILE fp fputs str fp str 需要输出的字符串 可以是字符串常量或字符串指针 fp 文件指针变量 fputs与puts函数的功能类似 它们的区别 puts函数能将字符串的结束标志 0 转换成 n 输出 因此字符串在显示器输出后 光标移至下一行 而fputs函数对字符串结束标志 0 的处理仅仅是将其舍去 10 2文本文件的读写 10 2 3文件的字符串输入输出函数 1 字符串输出函数fputs 函数功能 将字符串 不包括字符串结束标志 0 写到文件指针fp所指向的文件中 若输出操作成功 返回非0值 若输出操作失败 则返回0 25 常用的调用形式 FILE fp fgets str n fp str 字符指针 可以是字符数组名或字符指针变量 n 读取字符个数 n 1 fp 文件指针变量 10 2文本文件的读写 10 2 3文件的字符串输入输出函数 2 字符串输入函数fgets 函数功能 从fp所指向的文件中 读取n 1个字符后 加上字符串结束标志 0 组成一个字符串 存入字符数组中 若输入操作成功 返回字符数组的首地址 若文件结束或输入操作失败 则返回NULL 从文件读取字符的过程中 如果读到回车符 15 舍去 如果读到换行符 12 仍按字符读出 再加上 0 作为一个字符串 同时结束文本行读取操作 函数正常返回 当读到文件结束时 直接加上 0 作为一个字符串 函数正常返回 fgets与gets函数的区别 gets函数以换行符作为行结束标志 并舍去换行符 fgets函数也以换行符作为行的读结束标志 但换行符同时还作为字符串的内容 因此可将含有换行符的文本文件看作是由一行一行字符组成的 26 例10 3 应用fputs和fgets函数 建立和读取文本文件 include stdio h include string h main FILE fp 定义一个文件指针变量fp charfilename 40 str 81 printf filename 提示输入磁盘文件名 gets filename if fp fopen filename w NULL 在磁盘中新建并打开一个文本文件 同时测试是否成功 printf Can topenthe s n filename exit 0 10 2文本文件的读写 10 2 3文件的字符串输入输出函数 27 while strlen gets str 0 键盘输入空串 即仅输入回车 则输入全部结束 fputs str fp 将键盘输入的字符串写到文件中 fputc n fp 在文件中加入换行符作为字符串分隔符 fclose fp 建立文件结束 关闭文件 printf outfile n fp fopen filename r 以读方式打开文本文件 while fgets str 81 fp NULL 从文件读取字符串并测试文件是否已读完 printf s str 将文件中读取的字符串分行显示 fclose fp 读文件结束 关闭文件 10 2文本文件的读写 10 2 3文件的字符串输入输出函数 28 与标准文件的格式输入输出函数scanf和printf相对应 文本文件也有格式输入输出函数fscanf和fprintf 它们的功能和格式基本相同 不同之处在于scanf和printf的读写对象是终端 键盘和显示器 fscanf和fprintf的读写对象是磁盘文件 常用的调用形式 FILE fp fprintf fp 格式控制串 输出项参数表 fp 文件指针变量 格式控制串和输出项参数表的规定和使用方法与printf函数相同 10 2文本文件的读写 10 2 4文件的格式输入输出函数 1 格式输出函数fprintf 函数功能 将输出项按指定格式写入fp所指向的文件中 若输出操作成功 返回写入的字节数 若输出操作失败 则返回EOF 29 常用的调用形式 FILE fp fscanf fp 格式控制串 地址表 fp 文件指针变量 格式控制串和地址表的规定和使用方法与scanf函数相同 10 2文本文件的读写 10 2 4文件的格式输入输出函数 2 格式输入函数fscanf 函数功能 按格式控制串所描述的格式 从fp所指向的文件中读取数据 送到指定的内存地址单元中 若输入操作成功 返回实际读出的数据项个数 不包括数据分隔符 若没有读数据项 则返回0 若文件结束或调用失败 则返回EOF 30 二进制文件存储信息的形式与内存中存储信息的形式是一致的 如果需要在内存与磁盘文件之间频繁交换数据 最好采用二进制文件 二进制文件一般是同类型数据集合 数据之间无分隔符 每个数据所占字节数是一个定值 因此二进制文件除了可以顺序存取外 还可运用定位函数方便地进行随机存取 常用的调用形式 FILE fp putw w fp w 要输出的整型数据 可以是常量或变量 fp 文件指针变量 10 3二进制文件的读写 10 3 1文件的字输入输出函数 1 字输出函数putw 函数功能 把整型数w写入fp所指向的文件 以写方式打开的二进制文件 若输出操作成功 返回w值 若输出操作失败 则返回EOF 由于EOF 1 是一个合法的整数 因此应该用ferror函数检测函数调用是否出错 31 常用的调用形式 FILE fp getw fp fp 文件指针变量 10 3二进制文件的读写 10 3 1文件的字输入输出函数 2 字输入函数getw 函数功能 从fp所指向的文件 以读方式打开的二进制文件 中读取一个整型数 若输入操作成功 返回从文件中读取的整数 若文件结束或调用失败 则返回EOF EOF 1 是getw函数可能返回的合法值 所以应该用feof函数或ferror函数检测文件是否结束或调用失败 32 常用的调用形式 FILE fp ferror fp fp 文件指针变量 10 3二进制文件的读写 10 3 1文件的字输入输出函数 3 文件操作错误函数ferror 函数功能 检测文件读写是否出错 若出错 则指示器置1 否则指示器置0 函数返回错误指示器值 说明 错误指示器若置1后 只有调用clearerr函数或rewind函数才能将其清0 33 常用的调用形式 FILE fp clearerr fp fp 文件指针变量 10 3二进制文件的读写 10 3 1文件的字输入输出函数 4 清除错误标志函数clearerr 函数功能 将文件的错误指示器和文件结束指示器清0 该函数无返回值 34 例10 5 应用putw和getw函数建立二进制整型数据文件并读取其中的数据 include stdio h main FILE fp 定义一个文件指针变量fp charfilename 40 filename用于存放数据文件名 inti n1 5 n2 x 5 10 22 36 48 59 y 5 printf filename gets filename if fp fopen filename wb NULL 新建并打开一个二进制文件 并测试是否成功 printf Can topenthe s n filename exit 0 10 3二进制文件的读写 10 3 1文件的字输入输出函数 35 putw n1 fp 向二进制文件写入一个整数 for i 0 i n1 i putw x i fp 将x数组的5个整数写入二进制文件 fclose fp 建立文件结束 关闭文件 printf outfile n fp fopen filename rb 以读方式打开二进制文件 n2 getw fp 从二进制文件读取一个整数 for i 0 i n2 i y i getw fp 从文件读取一个整数赋给y数组元素 printf d y i printf n fclose fp 读文件结束 关闭文件 10 3二进制文件的读写 10 3 1文件的字输入输出函数 36 常用的调用形式 fwrite p size n fp p 某类型指针 size 某类型数据存储空间的字节数 数据项大小 n 此次写入文件的数据项数 fp 文件指针变量 10 3二进制文件的读写 10 3 2文件的数据块输入输出函数 1 数据块输出函数fwrite 函数功能 将p指向的存储区中n个数据项写入fp所指向的文件 若输出操作成功 返回写入的数据项数 若输出操作失败 则返回0 运用数据块输入输出函数可建立整型 实型 结构体类型等各种类型的二进制文件 37 常用的调用形式 fread p size n fp p 某类型指针 size 某类型数据存储空间的字节数 数据项大小 n 此次从文件中读取的数据项数 fp 文件指针变量 10 3二进制文件的读写 10 3 2文件的数据块输入输出函数 2 数据块输入函数fread 函数功能 从fp所指向的文件中 读取n个数据项 存放到p所指向的存储区域 若输入操作成功 返回实际读出的数据项个数 若文件结束或调用失败 则返回0 38 例10 6 应用fwrite与fread函数建立一个存放学生电话簿的二进制数据文件并读取其中的数据 include stdio h main FILE fp inti charfilename 40 filename用于存放数据文件名 structtel charname 20 tel 9 in 5 out 5 printf filename gets filename if fp fopen filename wb NULL printf Can topenthe s n filename exit 0 10 3二进制文件的读写 10 3 2文件的数据块输入输出函数 新建并打开一个二进制文件 并测试是否成功 39 for i 0 i 5 i printf name gets in i name printf tel gets in i tel fwrite in sizeof structtel 5 fp 文件中写入5个学生的电话 fclose fp 建立文件结束 关闭文件 printf outfile n fp fopen filename rb 以读方式打开二进制文件 fread out sizeof structtel 5 fp 从文件读取5个结构体数据 printf nametelephone n for i 0 i 5 i printf 20s 8s n out i nam

温馨提示

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

最新文档

评论

0/150

提交评论