C语言程序设计-第十章PPT课件_第1页
C语言程序设计-第十章PPT课件_第2页
C语言程序设计-第十章PPT课件_第3页
C语言程序设计-第十章PPT课件_第4页
C语言程序设计-第十章PPT课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1 2 学习的意义 C语言执行程序 输入数据 存在问题 运行完毕 结果消失 运行结果能否长期保存呢 使用文件 文件无处不在 切不可视而不见 时而不理 如 C语言源程序文件 c或 cpp 执行文件 exe 图片文件 jpg 3 学习目标 学习内容 文件的基本概念文件的类别文件操作概述文件指针文件的打开 读写和关闭文件的打开与关闭文件的读写文件读写函数选用原则文件的定位读写文件应用综合举例本章小结 理解文件的概念正确把握文本文件与二进制文件的区别 掌握文件的打开 读写 定位以及关闭的方法 掌握文件系统中有关文件操作的系统函数使用方法 能设计对文件进行简单处理的实用程序 4 12 1文件的基本概念 文件 存储在外部介质上数据的集合 是操作系统数据管理的单位 使用数据文件的目的 数据文件的改动不引起程序的改动 程序与数据分离不同程序可以访问同一数据文件中的数据 数据共享能长期保存程序运行的中间数据或结果数据 文件命名规则 为标识一个文件 每个文件都必须有一个文件名 其一般结构为 主文件名 扩展名 文件命名规则 遵循操作系统的约定 例如 一个C语言源程序名为 prg c 5 12 2文件的类别 按文件的逻辑结构 记录文件 由具有一定结构的记录组成 定长和不定长 流式文件 由一个个字符 字节 数据顺序组成按存储介质 普通文件 存储介质文件 磁盘 磁带等 设备文件 非存储介质 键盘 显示器 打印机等 按文件的内容程序文件 程序文件又可分为源文件 目标文件和可执行文件 数据文件 如各种图像文件 声音文件等 根据文件的组织形式顺序存取文件 随机存取文件 按数据的组织形式 文本文件 ASCII文件 每个字节存放一个字符的ASCII码二进制文件 数据按其在内存中的存储形式原样存放 6 shortint数据32767 32767的各字符的ASCII码存放形式 内存存放形式 文本文件特点 存储量大 速度慢 便于对字符操作 二进制文件特点 存储量小 速度快 便于存放中间结果 7 12 3文件操作概述 读文件与写文件 读文件 将磁盘文件中的数据传送到计算机内存的操作 写文件 从计算机内存向磁盘文件中传送数据的操作 构成文件的基本单元与流式文件 语言将文件看作是由一个一个的字符 ASCII码文件 或字节 二进制文件 组成的 文件中不存在其它更复杂的数据类型和结构 对文件数据的解释完全看程序本身 我们把按这种方式处理的文件称为流式文件 而在其它高级语言中 组成文件的基本单位是记录 对文件操作的基本单位也是记录 C语言程序也可以按照操作系统的方式操作文件 本章只介绍流式文件的操作方法 C语言本身没提供输入输出的功能 必须调用标准库函数进行文件读写 8 文件处理方法缓冲文件系统 高级文件系统 系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统 低级文件系统 由用户在程序中为每个文件设定缓冲区 9 12 4文件指针 文件结构体FILE缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio h中 BorlandC 3 1 typedefstruct intlevel fill emptylevelofbuffer unsignedflags Filestatusflags charfd Filedescriptor unsignedcharhold Ungetccharifnobuffer intbsize Buffersize unsignedchar FAR buffer Datatransferbuffer unsignedchar FAR curp Currentactivepointer unsignedistemp Temporaryfileindicator shorttoken Usedforvaliditychecking FILE ThisistheFILEobject 10 文件类型指针指针变量说明 FILE fp 用法 文件打开时 系统自动建立文件结构体 并把指向它的指针返回来 程序通过这个指针获得文件信息 访问文件文件关闭后 它的文件结构体被释放 11 12 5文件的打开 读写和关闭 1 文件的打开与关闭 打开文件fopen FILE fopen char filename char mode C文件操作用库函数实现 包含在stdio h文件使用方式 打开文件 文件读 写 关闭文件系统自动打开和关闭三个标准文件 标准输入 键盘stdin标准输出 显示器stdout标准出错输出 显示器stderr 函数原形 要打开的文件名 打开文件方式 功能 按指定方式打开文件返值 正常打开 为指向文件结构体的指针 打开失败 为NULL 12 打开文件方式mode由两类字符构成 一类字符表示打开文件的类型t 表示文本文件 text 默认方式 b 表示二进制文件 binary 另一类字符是操作类型r 表示从文件中读取数据 read w 表示向文件写入数据 write a 表示在文件尾追加数据 append 表示文件可读可写 注意 打开文件方式字符串mode其字符先后次序是 操作类型符在前 打开文件类型符在后 如 rb wt 不可写成 br tw 而对于 来说 可以放在操作类型符的右边 也可放在字符串的最后 但不可放在操作类型符的左边 如 w b 或 wb 都是正确的 而 wb 则是错误的 例 FILE fp fp fopen wang txt r if fp NULL printf thefile wang txtnotfound exit 1 13 打开文件fopen int fclose FILE filepointer 函数原形 文件打开时返回的文件类型指针 功能 关闭filepointer指向的文件返值 正常关闭为0 出错时 非0作用 使文件指针变量与文件 脱钩 释放文件结构体和文件指针 不关闭文件可能会丢失数据 FILE fp fp fopen wang txt r if fp NULL printf thefile wang txtnotfound exit 1 读取和加工数据fclose fp 关闭该文件 14 2 文件的读写 在 语言中提供了多种文件读写的函数 这些函数主要包括 字符读写函数 fgetc和fputc字符串读写函数 fgets和fputs数据块读写函数 fread和fwrite格式化读写函数 fscanf和fprinf 1 字符读写函数 fgetc和fputc fgetc 函数原形 intfgetc FILE filepointer 功能 从filepointer指向的文件中 读入一个字节 字符 同时将读写位置指针向前移动1个字节 即指向下一个字符 返值 正常 返回读到的代码值 读到文件尾或出错 为EOF 15 fputc 函数原形 intfputc intc FILE filepointer 功能 将字符数据c输出到filepointer所指向的文件中去 同时将读写位置指针向前移动1个字节 即指向下一个写入位置 返值 正常 返回c 出错 为EOF 16 例1 将键盘上输入的一个字符串 以 作为结束字符 以ASCII码形式存储到一个磁盘文件中 然后从该磁盘文件中读出其字符串并显示出来 include includevoidmain intargc char argv FILE fp1 fp2 charch if argc 2 参数个数不对 printf thenumberofargumentsnotcorrect n n printf Usage 可执行文件名filename n exit 0 if fp1 fopen argv 1 wt NULL 打开文件失败 printf cannotopenthisfile n exit 0 输入字符 并存储到指定文件中for ch getchar fputc ch fp1 输入字符并存储到文件中fclose fp1 关闭文件 顺序输出文件的内容fp2 fopen argv 1 rt for ch fgetc fp2 EOF putchar ch 顺序读入并显示fclose fp2 关闭打开的文件 运行结果 假设在DOS下输入的命令行如下 example1wang txt Howareyou Howareyou 17 例2 利用字符读写函数实现文件拷贝 include includevoidmain intargc char argv input 源文件指针 output 目标文件指针FILE input output if argc 3 参数个数不对 printf thenumberofargumentsnotcorrect n printf nUsage 可执行文件名source filedest file exit 0 打开源文件失败if input fopen argv 1 r NULL printf cannotopensourcefile n exit 0 创建目标文件失败if output fopen argv 2 w NULL printf cannotcreatedestinationfile n exit 0 复制源文件到目标文件中for feof input fputc fgetc input output fclose input 关闭源文件fclose output 关闭目标文件 18 文件读写位置指针 在文件内部有一个位置指针 用来指向文件的当前读写字节 在文件打开时 该指针总是指向文件的第一个字节 使用fgetc函数后 该位置指针将向后移动一个字节 因此可连续多次使用fgetc函数 读取多个字符 文件读写位置指针与文件指针的区别 文件指针是指向整个文件的 须在程序中定义说明 只要不重新赋值 文件指针的值是不变的 文件内部的位置指针用以指示文件内部的当前读写位置 每读写一次 该指针均向后移动 它不需在程序中定义说明 而是由系统自动设置的 19 2 字符串读写函数 fgets和fputs fgets 函数原形 char fgets char s intn FILE filepointer 功能 从filepointer所指向的文件读取一字节串返值 正常 返回读取的字符串的指针 出错或文件尾 则返回NULL 从filepointer所指文件读n 1个字符送入s指向的内存区 并在最后加一个 0 若读入n 1个字符前遇换行符或文件尾 EOF 即结束 fputs 函数原形 intfputs char s FILE filepointer 功能 将存放在s中的字符串写到文件指针filepointer所指向的文件中去 同时将读写位置指针向前移动字符串长度个字节 返值 正常时返回写入的最后一个字符 出错为EOF 不会将字符串结尾符 0 写入文件 也不会自动向文件写入换行符 如果需要写入一行文本 s字符串中必须包含 n 20 include includevoidmain FILE fp1 fp2 charstr 123456789 创建文本文件wang txtfp1 fopen wang txt w if fp1 NULL 创建文件失败 printf cannotopenfile wang txt n exit 0 将字符串 12345678 写入文件fputs str fp1 写入第一行文本的换行符和下一行文本fputs nabcd fp1 fclose fp1 关闭文件 例3 向文件wang txt中写入两行文本 然后分三次读出其内容 313233343536373839 0D0A61626364 21 fp2 fopen wang txt rt 以只读方式打开wang txt文件fgets str 8 fp2 读取字符串 最大长度是7 将是 1234567 printf s n str fgets str 8 fp2 读取字符串 最大长度是7 实际上将是 89 n printf s n str fgets str 8 fp2 读取字符串 最大长度是7 实际上将是 abcd printf s n str fclose fp2 关闭打开的文件 运行结果 1234567 89 abcd 22 include includevoidmain intargc char argv input 源文件指针 output 目标文件指针FILE input output charstring 81 if argc 3 参数个数不对 printf thenumberofargumentsnotcorrect n printf nUsage 可执行文件名source filedest file exit 0 打开源文件失败if input fopen argv 1 r NULL printf cannotopensourcefile n exit 0 例4 利用字符串读写函数实现文件拷贝 创建目标文件失败if output fopen argv 2 w NULL printf cannotcreatedestinationfile n exit 0 复制源文件到目标文件中while fgets string 81 input NULL fputs string output fclose input 关闭源文件fclose output 关闭目标文件 23 3 数据块读写函数 fread和fwrite fread 函数原形 unsignedfread void ptr unsignedsize unsignedn FILE filepointer 功能 从filepointer所指向的文件中读取n个数据项 每个数据项的大小是size个字节 这些数据将被存放到ptr所指向的内存中 同时 将读写位置指针向前移动n size个字节 返值 如果操作成功 则函数返回值就是读取的数据项的个数 不是字节的个数 如果操作出错或遇到文件尾 则返回0 24 3 数据块读写函数 fread和fwrite fwrite 函数原形 unsignedfwrite void ptr unsignedsize unsignedn FILE filepointer 功能 将ptr所指向的内存中存放的n个大小为size个字节的数据项写入到filepointer所指向的文件中 实际要写入数据的字节数是n size 同时 将读写位置指针向前移动n size个字节 返值 如果操作成功 则函数返回值就是实际写入的数据项的个数 不是字节的个数 如果操作出错 则返回0 注意 fread和fwrite一般用于二进制文件的输入和输出 25 include include includevoidmain FILE fp shorti a 10 0 1 2 3 4 5 6 7 8 9 创建二进制文件wang datfp fopen wang dat wb if fp NULL 创建失败 printf cannotcreatefile wang txt n exit 0 将数组a的10个整型数写入到文件中fwrite a sizeof short 10 fp fclose fp 关闭文件 以读的打开二进制文件wang datfp fopen wang dat rb if fp NULL 打开失败 printf cannotopenfile wang dat n exit 0 将数组a的10个元素清0memset a 0 10 sizeof short 从文件中读取10个整型数据到数组afread a sizeof short 10 fp fclose fp 关闭文件for i 0 i 10 i 显示数组a的元素printf d a i 运行结果 0123456789 例5 将一个整型数组存放到文件中 然后从文件中读取数据到数组中并显示 26 include include includestructstudent info charno 9 charname 10 charsex intage charaddress 20 typedefstructstudent infoSTUINFO voidWriteToFile STUINFO pstu intnum voidReadFromFile STUINFO pstu intnum 例6 将多个学生的基本信息存放到student dat文件中 然后从文件中读出并显示 voidmain inti num STUINFO pstu 输入学生人数printf inputthenumberofstudents scanf d 27 例6 将多个学生的基本信息存放到student dat文件中 然后从文件中读出并显示 for i 0 i num i 输入学生信息 printf the dthstudent no i 1 gets pstu i no fflush stdin printf the dthstudent name i 1 gets pstu i name fflush stdin printf the dthstudent sex i 1 scanf c 将pstu所指向的学生信息写入文件中WriteToFile pstu num 将pstu所指向的内存块清0memset pstu 0 num sizeof STUINFO 从文件中读取学生信息到pstu所指向的内存块中ReadFromFile pstu num 显示学生信息printf 10s 12s 6s 5s 20s n no name sex age address for i 0 i num i printf 10s 12s 6c 5d 20s n pstu i no pstu i name pstu i sex pstu i age pstu i address free pstu 释放动态分配的内存 28 例6 将多个学生的基本信息存放到student dat文件中 然后从文件中读出并显示 将pstu所指向的学生信息写入文件student dat中voidWriteToFile STUINFO pstu intnum FILE fp fp fopen student dat wb if fp NULL printf can tcreatestudent dat n free pstu exit 0 fwrite pstu sizeof STUINFO num fp fclose fp 从文件student dat中读取学生信息到pstu所指向的内存块中voidReadFromFile STUINFO pstu intnum FILE fp fp fopen student dat rb if fp NULL printf can topenstudent dat n free pstu exit 0 fread pstu sizeof STUINFO num fp fclose fp 29 4 格式化读写函数 fscanf和fprinf fscanf 函数原形 intfscanf FILE filepointer constchar format address 功能 从filepointer所指向的文件中读取数据 返值 如果操作成功 则函数返回值就是读取的数据项的个数 如果操作出错或遇到文件尾 则返回EOF fprintf 函数原形 intfprintf FILE filepointer constchar format address 功能 将表达式输出到filepointer所指向的文件中 返值 如果操作成功 则函数返回值就是写入到文件中数据的字节个数 如果操作出错 则返回EOF 例如 fprintf fp d 6 2f i t 将i和t按 d 6 2f格式输出到fp文件fscanf fp d f 若文件中有3 4 5 则将3送入i 4 5送入t 30 include includevoidmain inti 3 floatf float 9 8 FILE fp 创建文本文件wang txtfp fopen wang txt w if fp NULL 创建失败 printf can tcreatefile wang dat n exit 0 将变量i和f的值格式化输出到文件中fprintf fp 2d 6 2f i f fclose fp 关闭文件 例7 将变量的值格式化写入文件中 然后从文件中格式化读出并显示 20332C2020392E3830 31 以读的方式打开文件wang txtfp fopen wang txt r if fp NULL 打开失败 printf can topenfile wang dat n exit 0 i 0 i清0f 0 f清0 从文件中读取数值到变量i和ffscanf fp d f 运行结果 i 3 f 9 80 注意 文件格式化输出函数fprintf总是以字符串的形式将数据信息存放到文件中 而不是以数值的形式存放到文件中 不管打开的是文本文件还是二进制文件 32 3 文件读写函数选用原则 读 写1个字符 或字节 数据时 选用fgetc 和fputc 函数 读 写1个字符串时 选用fgets 和fputs 函数 读 写1个 或多个 不含格式的数据时 选用fread 和fwrite 函数 读 写1个 或多个 含格式的数据时 选用fscanf 和fprintf 函数 对使用文件类型的要求 fgetc 和fputc 函数主要对文本文件进行读写 但也可对二进制文件进行读写 fgets 和fputs 函数主要对文本文件进行读写 对二进制文件操作无意义 fread 和fwrite 函数主要对二进制文件进行读写 但也可对文本文件进行读写 fscanf 和fprintf 函数主要对文本文件进行读写 对二进制文件操作无意义 33 12 6文件的定位读写 几个概念 文件位置指针 指向当前读写位置的指针读写方式 顺序读写 位置指针按字节位置顺序移动 叫 随机读写 位置指针按需要移动到任意位置 叫 rewind 函数原形 voidrewind FILE filepointer 功能 将filepointer所指向的文件的位置指针重新置回到文件的开头 返值 无 34 fseek 函数原形 intfseek FILE filepointer longoffset intwhence 功能 改变文件位置指针的位置返值 成功 返回0 失败 返回非0值 文件指针 位移量 以起始点为基点 移动的字节数 0向后移动 0向前移动 起始点文件开始SEEK SET0文件当前位置SEEK CUR1文件末尾SEEK END2 ftell 函数原形 longftell FILE filepointer 功能 返回位置指针当前位置 用相对文件开头的位移量表示 返值 成功 返回当前位置指针位置 失败 返回 1L 35 例8 磁盘文件上有3个学生数据 要求读入第1 3学生数据并显示 include include includestructstudent info charno 9 charname 10 charsex intage chardepart 15 stu 3 0001 WangFei M 18 Computer 0002 ZhangMin M 19 Math 0003 LiYan F 19 English voidmain inti FILE fp 以读写方式打开二进制文件fp fopen student dat wb if fp NULL 打开失败 printf can tcreatefile student dat n exit 0 将学生信息写入到文件中fwrite stu sizeof structstudent info 3 fp rewind fp 将文件位置指针置回到文件头memset stu 0 3 sizeof structstudent info 清除学生信息 读第1和第3个学生的信息到结构数组stu中for i 0 i 3 i 2 文件位置指针定位fseek fp i sizeof structstudent info SEEK SET 读取一个学生的信息fread 关闭文件 运行结果 0001WangFeiM18Computer0003LiYanF19English 36 例9 求文件的长度 include includevoidmain intargc char argv FILE fp longlength if argc 2 命令行参数有误 printf Useage 执行文件名filename n exit 0 fp fo

温馨提示

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

评论

0/150

提交评论