




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 C语言程序设计 程序设计中一个重要的概念 第13章文件 2 本章内容 文件和文件指针文件的打开与关闭文件的读写其它函数 3 文件 存储在外部存储介质上相关数据的集合 例如 程序文件中保存着程序 数据文件中保存着数据 CC语言的源程序 OBJ目标文件 EXE可执行文件文件的存储特性文件是一个有序的数据序列 C语言把文件作为一个字符 字节 序列处理 对文件的存取是以字符 字节 为单位进行的 13 1文件和文件指针 1 什么是文件 4 按文件存储数据的形式 ASCII文件 或称文本文件 ASCII码文件中每个字节存放一个ASCII代码 代表一个字符 此种存储形式便于输出显示 在DOS操作系统下可以直接阅读 二进制文件二进制文件中的数据是按照在内存中的二进制存储格式存放的 此种存储形式节省存储单元 二进制文件在DOS操作系统下不能直接阅读 2 文件的种类 13 1文件和文件指针 5 例如将整数1949分别存储在这两种数据文件中 ASCII文件 ASCII码 二进制文件 补码 占用4个字节 占用2个字节 2 文件的种类 13 1文件和文件指针 6 按照对文件的处理方式 缓冲文件利用缓冲文件系统处理的文件称为缓冲文件 系统处理方法是在内存中为每个正在使用的缓冲文件开辟一个缓冲区 其大小是512个字节 对文件读写数据都通过缓冲区进行 非缓冲文件利用非缓冲文件系统处理的文件称为非缓冲文件 系统处理非缓冲文件时 不为文件开辟缓冲区 需要程序员自行设计并管理缓冲区 83年以后ANSIC标准中取消了非缓冲文件系统 对文本文件和二进制文件均采用缓冲文件系统进行处理 2 文件的种类 13 1文件和文件指针 7 系统对文件的处理过程就是对文件进行输入 输出操作的过程 从文件读数据时 先一次性从磁盘文件中读取一批数据到缓冲区 然后再从缓冲区逐个将数据送入变量 向文件写数据时 也是先将变量中数据送到缓冲区 待缓冲区装满后 再一起存到磁盘文件中 3 缓冲文件和文件指针 13 1文件和文件指针 8 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 13 1文件和文件指针 9 13 2文件的打开与关闭 操作文件的一般步骤打开文件 读写文件 关闭文件 打开文件 建立用户程序与文件的联系 为文件分配一个文件缓冲区 读写文件 是指对文件的读 写 追加和定位操作 关闭文件 切断文件与程序的联系 释放文件缓冲区 C语言的输入输出函数库中提供了大量的函数 用于完成对数据文件的建立 数据的读写 数据的追加等操作 在程序中调用这些函数时 必须先用include命令包含stdio h文件 10 常用的调用形式 FILE fp fp fopen 文件名 文件使用方式 文件名 需要打开的文件名称 字符串 文件使用方式 是具有特定含义的符号 1 文件打开函数fopen 函数功能 按指定的文件使用方式打开指定的文件 若文件打开成功 为该文件分配一个文件缓冲区和一个FILE类型变量 返回一个FILE类型指针 若文件打开失败 返回NULL 13 2文件的打开与关闭 11 文本文件的三种基本使用方式 r 只读方式为读 输入 文本文件打开文件 若文件不存在 返回NULL w 只写方式为写 输出 文本文件打开文件 若文件不存在 则建立一个新文件 若文件已存在 则清空文件 a 追加方式为写 输出 文本文件打开文件 若文件已存在 则保持原来文件的内容 将新的数据增加到原来数据的后面 若文件不存在 则返回NULL 13 2文件的打开与关闭 12 二进制文件的三种基本使用方式 rb 只读方式为读 输入 二进制文件打开文件 若文件不存在 返回NULL wb 只写方式为写 输出 二进制文件打开文件 若文件不存在 则建立一个新文件 若文件已存在 则清空文件 ab 追加方式为写 输出 二进制文件打开文件 若文件已存在 则保持原来文件的内容 将新的数据增加到原来数据的后面 若文件不存在 则返回NULL 13 2文件的打开与关闭 13 文件的其他打开方式 r 可以对文本文件进行读 写操作 若文件不存在返回NULL 若文件存在内容不被清空 w 可以对文本文件进行读 写操作 若文件已经存在 则先清空文件原来的内容 a 可以对文本文件进行读 追加操作 文件内容不会清空 rb 可以对二进制文件进行读 写操作 wb 可以对二进制文件进行读 写操作 ab 可以对二进制文件进行读 追加操作 13 2文件的打开与关闭 14 检查文件打开操作是否成功if fp fopen filename r NULL printf Cannotopenfile n exit 0 检查以只读方式打开文件名为filename的文件是否成功 exit函数的作用 结束程序的执行 并将实参0作为函数返回值传给操作系统 13 2文件的打开与关闭 15 常用的调用形式 FILE fp fclose fp fp 已经打开的文件指针 2 文件关闭函数fclose 函数功能 关闭fp指定的文件 释放该文件的缓冲区 FILE类型变量及文件指针 若文件关闭成功 则返回0 若文件关闭失败 则返回非0值 13 2文件的打开与关闭 16 常用的调用形式 FILE fp fputc ch fp ch 需要输出的字符 可以是字符常量或字符变量 fp 文件指针变量 1 字符输出函数fputc 或putc 函数功能 将一个字符 ASCII码 写入到fp所指向的文件 该文件必须是以写或读写方式打开的 中 若输出操作成功 函数返回写入的字符 否则 返回EOF 系统定义的文本文件结束标志 其值为 1 13 3文件的读写 17 常用的调用形式 FILE fp ch fgetc fp ch 可以是字符变量或整型变量 fp 文件指针变量 2 字符输入函数fgetc 或getc 函数功能 从fp所指向的文件 该文件必须是以读或读写方式打开的 中读取一个字符 若输入操作成功 函数返回读入的字符 若文件结束或输入操作失败 则返回EOF 13 3文件的读写 18 例13 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 测试打开文件是否成功 13 3文件的读写 19 while c getchar n 键盘文件结束标志 输入Ctrl z 显示 Z后回车 putc c fp 将键盘输入的字符写到文件中 fclose fp 建立文件结束 关闭文件 printf outfile n fp fopen filename r 以读方式打开文本文件 while c getc fp EOF 未读到文件结束标志时 putchar c 在显示器显示读出的字符 fclose fp 读文件结束 关闭文件 13 3文件的读写 20 常用的调用形式 FILE fp feof fp fp 文件指针变量 3 文件结束测试函数 函数功能 测试fp所指向的文件是否已读到文件尾部 若该文件没有结束 则返回0 若文件结束 则返回非0值 13 3文件的读写 21 例如 复制一个磁盘文件 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 3 文件结束测试函数 13 3文件的读写 22 常用的调用形式 fwrite p size n fp p 某类型指针 size 某类型数据存储空间的字节数 数据项大小 n 此次写入文件的数据项数 fp 文件指针变量 4 数据块输出函数fwrite 函数功能 将p指向的存储区中n个数据项写入fp所指向的文件 若输出操作成功 返回写入的数据项数 若输出操作失败 则返回0 运用数据块输入输出函数可建立整型 实型 结构体类型等各种类型的二进制文件 13 3文件的读写 23 常用的调用形式 fread p size n fp p 某类型指针 size 某类型数据存储空间的字节数 数据项大小 n 此次从文件中读取的数据项数 fp 文件指针变量 5 数据块输入函数fread 函数功能 从fp所指向的文件中 读取n个数据项 存放到p所指向的存储区域 若输入操作成功 返回实际读出的数据项个数 若文件结束或调用失败 则返回0 13 3文件的读写 24 例13 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 新建并打开一个二进制文件 并测试是否成功 13 3文件的读写 25 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 name out i tel fclose fp 读文件结束 关闭文件 13 3文件的读写 26 常用的调用形式 FILE fp fputs str fp str 需要输出的字符串 可以是字符串常量或字符串指针 fp 文件指针变量 fputs与puts函数的功能类似 它们的区别 puts函数能将字符串的结束标志 0 转换成 n 输出 因此字符串在显示器输出后 光标移至下一行 而fputs函数对字符串结束标志 0 的处理仅仅是将其舍去 6 字符串输出函数fputs 函数功能 将字符串 不包括字符串结束标志 0 写到文件指针fp所指向的文件中 若输出操作成功 返回非0值 若输出操作失败 则返回0 13 3文件的读写 27 常用的调用形式 FILE fp fgets str n fp str 字符指针 可以是字符数组名或字符指针变量 n 读取字符个数 n 1 fp 文件指针变量 7 字符串输入函数fgets 函数功能 从fp所指向的文件中 读取n 1个字符后 加上字符串结束标志 0 组成一个字符串 存入字符数组中 若输入操作成功 返回字符数组的首地址 若文件结束或输入操作失败 则返回NULL 从文件读取字符的过程中 如果读到回车符 15 舍去 如果读到换行符 12 仍按字符读出 再加上 0 作为一个字符串 同时结束文本行读取操作 函数正常返回 当读到文件结束时 直接加上 0 作为一个字符串 函数正常返回 fgets与gets函数的区别 gets函数以换行符作为行结束标志 并舍去换行符 fgets函数也以换行符作为行的读结束标志 但换行符同时还作为字符串的内容 因此可将含有换行符的文本文件看作是由一行一行字符组成的 13 3文件的读写 28 例13 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 13 3文件的读写 29 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 读文件结束 关闭文件 13 3文件的读写 30 与标准文件的格式输入输出函数scanf和printf相对应 文本文件也有格式输入输出函数fscanf和fprintf 它们的功能和格式基本相同 不同之处在于scanf和printf的读写对象是终端 键盘和显示器 fscanf和fprintf的读写对象是磁盘文件 常用的调用形式 FILE fp fprintf fp 格式控制串 输出项参数表 fp 文件指针变量 格式控制串和输出项参数表的规定和使用方法与printf函数相同 8 格式输出函数fprintf 函数功能 将输出项按指定格式写入fp所指向的文件中 若输出操作成功 返回写入的字节数 若输出操作失败 则返回EOF 13 3文件的读写 31 常用的调用形式 FILE fp fscanf fp 格式控制串 地址表 fp 文件指针变量 格式控制串和地址表的规定和使用方法与scanf函数相同 9 格式输入函数fscanf 函数功能 按格式控制串所描述的格式 从fp所指向的文件中读取数据 送到指定的内存地址单元中 若输入操作成功 返回实际读出的数据项个数 不包括数据分隔符 若没有读数据项 则返回0 若文件结束或调用失败 则返回EOF 13 3文件的读写 32 二进制文件存储信息的形式与内存中存储信息的形式是一致的 如果需要在内存与磁盘文件之间频繁交换数据 最好采用二进制文件 二进制文件一般是同类型数据集合 数据之间无分隔符 每个数据所占字节数是一个定值 因此二进制文件除了可以顺序存取外 还可运用定位函数方便地进行随机存取 常用的调用形式 FILE fp putw w fp w 要输出的整型数据 可以是常量或变量 fp 文件指针变量 13 3文件的读写 10 字输出函数putw 函数功能 把整型数w写入fp所指向的文件 以写方式打开的二进制文件 若输出操作成功 返回w值 若输出操作失败 则返回EOF 由于EOF 1 是一个合法的整数 因此应该用ferror函数检测函数调用是否出错 33 常用的调用形式 FILE fp getw fp fp 文件指针变量 11 字输入函数getw 函数功能 从fp所指向的文件 以读方式打开的二进制文件 中读取一个整型数 若输入操作成功 返回从文件中读取的整数 若文件结束或调用失败 则返回EOF EOF 1 是getw函数可能返回的合法值 所以应该用feof函数或ferror函数检测文件是否结束或调用失败 13 3文件的读写 34 例13 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 13 3文件的读写 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 读文件结束 关闭文件 13 3文件的读写 36 常用的调用形式 FILE fp ferror fp fp 文件指针变量 1 文件操作错误函数ferror 函数功能 检测文件读写是否出错 若出错 则指示器置1 否则指示器置0 函数返回错误指示器值 说明 错误指示器若置1后 只有调用clearerr函数或rewind函数才能将其清0 13 4其它函数 37 常用的调用形式 FILE fp clearerr fp fp 文件指针变量 2 清除错误标志函数clearerr 函数功能 将文件的错误指示器和文件结束指示器清0 该函数无返回值 13 4其它函数 38 顺序读写操作在顺序读写文件时 文件的读写指针由系统自动控制 每次读写操作后 系统都会将读写指针移到下一个数据的位置 文件读写操作的内部机制文件的读写是通过文件系统内部的 读写指针 进行的 当打开一个文件时 系统自动为该文件分配的FILE结构体变量中有一个读写指针成员 对该文件的读写操作均通过读写指针进行 fopen后读写指针指向文件中第1个 将要读写的 字节 文件结束时 读写指针指向文件最后1个字节的后面 3 文件读写指针定位函数 随机读写操作通过改变文件读写指针的指向 可在文件的任意位置进行读写操作 13 4其它函数 39 常量标识符值起始位置SEEK SET0文件开始位置SEEK CUR1文件读写指针当前位置SEEK END2文件结束位置 函数功能 将文件读写指针从whence标识的位置移动offset个字节 并将文件结束指示器清0 若移动成功 返回0 若移动失败 则返回非0值 常用的调用形式 fseek fp offset whence fp 文件指针变量 offset 位移量 字节 长整型 whence 起始位置标志 4 文件读写指针移动函数fseek 是正数 文件读写指针向文件尾部方向移动 是负数向文件头部移动 该函数仅适用于二进制文件 fseek fp 30 0 从文件开始位置向文件结束方向移动30个字节fseek fp 10 1 从当前位置向文件开始方向移动10个字节fseek fp 8 2 从文件结束位置向文件开始方向移动8个字节 13 4其它函数 40 函数功能 将文件读写指针移到文件开始位置 并将文件结束指示器和错误指示器清0 该函数无返回值 常用的调用形式 rewind fp fp 文件指针变量 5 文件读写指针回绕函数rewind 该函数适用于二进制文件和文本文件 13 4其它函数 41 函数功能 返回fp指向的文件中的读写指针当前位置 即相对于文件开始处的位移量 单位是字节 若调用成功 则返回文件读写指针当前值 长整型 若调用失败 则返回 1L 常用的调用形式 ftell fp fp 文件指针变量 6 文件读写指针位置函数ftell 该函数适用于二进制文件和文本文件 13 4其它函数 42 作业 课后4 6 8 10 43 习题1 下列关于C语言文件操作叙述正确的是 A 先关闭文件B 先打开文件C 对顺序无要求D 先测试文件是否存在 然后再打开文件 2 若fp是指向某文件的指针 且已读到文件的末尾 则表达式feof fp 的返回值是 A EOFB 1C 非零值D NULL 3 C语言中库函数fgets str n fp 的功能是 A 从文件fp中读取长度n的字符串存入str指向的内存B 从文件fp中读取长度不超过n 1的字符串存入str指向的内存C 从文件fp中读取n个字符串存入str指向的内存D 从str读取至多n个字符到文件fp 44 4 已知一个文件中存放若干学生记录 其数据结构如下 structst charnum 10 intage floars 5 定义一个数组 structsta 10 假定文件已正确打开 不能正确地从文件中读出10名学生数据到数组中的是 A fread a sizeof structst 10 fp B for i 0 i 10 i fread a i sizeof structst 1 fp C for i 0 i 10 i fread a i sizeof structst 1 fp D for i 0 i 5 i 2 fread a i sizeof structst 2 fp 45 5 下列程序向文件输出的结果是 include stdio h main FILE fp fopen test wb fprintf fp d 5 0f c d 58 76273 0 2278 fclose fp 46 6 下面的程序从键盘输入一行字符 输出到磁盘文件file txt中 请在 处添入适当命令行 使之正确运行 includemain FILE 5p charstr 80 if 1 NULL printf can topenfile n exit 0 while strlen gets str 0 fputs str fp fputs n fp 2 47 7 若要打开D盘上me子目录下名为myfile dat的二进制文件进行读操作 下面符合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南许昌市消防救援支队招聘政府专职队员50人考前自测高频考点模拟试题及答案详解参考
- 2025贵州黔东南州镇远县青溪司法所招聘1人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025江苏苏州高新区狮山商务创新区招聘13人考前自测高频考点模拟试题及完整答案详解
- 2025广东云浮市郁南县林业局招聘生态管护人员2人模拟试卷及答案详解(夺冠系列)
- 2025年冀北博望电力产业管理(北京)有限公司高校毕业生招聘(第三批)模拟试卷及一套完整答案详解
- 2025江苏苏州市相城城市建设投资(集团)有限公司人员招聘考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025江苏南京紫金山科技产业发展集团有限公司招聘3人考前自测高频考点模拟试题及参考答案详解
- 2025广东广州市中山大学孙逸仙纪念医院耳鼻喉科医技岗位招聘1人考前自测高频考点模拟试题附答案详解(完整版)
- 2025湖南张家界市永定区发展和改革局招聘公益性岗位工作人员考前自测高频考点模拟试题附答案详解(突破训练)
- 2025辽宁沈阳科技学院诚聘高层次人才模拟试卷附答案详解(完整版)
- 全科医师外科规培体系
- 综合停电管理办法
- 《建筑设备自动化》课件-第6章 换热站与供暖系统的控制与管理
- 盐酸的安全管理课件
- 2025年秋数学(新)人教版三年级上课件:第1课时 曹冲称象的故事
- 杜邦安全四大阶段
- 非遗文化在地方高校美术教育中的应用路径研究
- 国家科技基础资源调查专项2025项目重要支持方向
- 租赁佣金提成管理制度
- 工程量清单审核要点
- 2025至2030中国农机市场行业项目调研及市场前景预测评估报告
评论
0/150
提交评论