C语言文件操作.ppt_第1页
C语言文件操作.ppt_第2页
C语言文件操作.ppt_第3页
C语言文件操作.ppt_第4页
C语言文件操作.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1 第八章文件 文件系统概述标准文件操作 2 文件 文件是存储在外部存储介质上的信息的集合 每个文件有唯一的文件名 主名 后缀 来标识 计算机实现按名对文件进行读 写等有关操作 广义上 操作系统将每一个与主机相联的输入输出设备都看作是文件 显示器 打印机是输出文件 键盘是输入文件 一 文件定义与分类 文件系统概述 3 2 文件的分类 1 按存储介质 磁盘文件 磁带文件 2 按文件的内容 从程序设计的角度看 源程序 目标文件 可执行文件 数据文件 3 按文件的编码方式 存储形式 文本文件 二进制文件 4 二 数据文件的存储形式 1 字符文件 文本文件 每个字符用一个ASCII码存储 即一个字符占一个字节 2 二进制文件 以数据在内存中的形式原样存于磁盘 如 一个短整数 short型 其二进制文件存储方式都是占 个字节 而字符文件存储方式所占字节数 该数的数字个数 int型数二进制文件字符文件126 字节 字节1268 字节 字节 5 例如 整数1268 文本文件形式 1 的ASCII码 00110001 00110010 00110110 00111000 二进制文件形式 00000100 11110100 1268的二进制数 2 的ASCII码 6 的ASCII码 8 的ASCII码 6 三 标准文件系统 非标准文件系统 程序数据区 输出文件缓冲区 输入 输入文件缓冲区 输出 输入 磁盘 内存 非标准文件系统 不使用缓冲区的磁盘文件系统 标准c采用缓冲文件系统 其原理图如下 输出 7 4 文件存取方式 在C语言中 文件的存取有两种方式 2 随机存取 1 顺序存取 8 标准文件操作 一 标准文件类型指针 每个被使用的文件都在内存中开辟一个区域 用来存放文件的有关信息 这些信息是保存在一个结构体类型的变量中 该结构体类型是由系统定义的 取名为FILE 1 文件类型指针概述 9 typedefstruct shortlevel unsignedflags charfd unsignedcharhild shortbsize unsignedchar buffer unsignedistemp shorttoken FILE FILE 一个标准的标识符 但不是关键字 10 如FILE fp fp是一个指向FILE类型结构体的指针变量 通过该结构体变量中的文件信息能够访问该文件 如果有N个文件 一般应设N个指针变量 使它们分别指向N个文件 确切地说 指向该文件的信息结构体 以实现对文件的访问 FILE 指针变量标识符 2 文件型指针变量的定义 11 标准文件操作的四个基本步骤 1 文件类型指针的定义 2 打开标准文件 3 标准文件的读或写的操作 4 标准文件的关闭操作 12 打开文件 对文件进行读或写 关闭文件 文件的操作步骤 文件打开函数 文件读写函数 文件关闭函数 定义文件类型指针 指针定义 13 二 标准文件的打开 打开文件的含义 将文件信息从磁盘装入计算机内存 建立文件的各种有关信息 并使文件指针指向该文件 即建立文件类型指针与文件名之间的关联 2 文件的打开函数 fopen fp fopen 文件名 使用文件方式 函数原型 FILE fopen char filename char mode 14 FILE类型指针 成功NULL 失败 fopen 函数的返回值应赋给一个FILE指针变量 否则 此函数的返回值就会丢失 导致无法对此文件进行操作 例如 FILE fp fp fopen A1 r 以上语句表示 要打开名字为A1的文件 使用文件的方式为 读入 fp指向A1文件 返回值 15 文件打开函数的调用给编译系统的三个信息 1 需要打开的文件名 2 使用文件的操作方式 3 让哪一个指针变量指向被打开的文件 16 r 只读 为输入打开一个文本文件 w 只写 为输出打开一个文本文件 a 追加 向文本文件尾增加数据 rb 只读 为输入打开一个二进制文件 wb 只写 为输出打开一个二进制文件 ab 追加 向二进制文件尾增加数据 3 C语言文件操作方式 r read w write a append b binary 读写 17 r 读写 为读 写打开一个文本文件 w 读写 为读 写建立一个新的文本文件 a 读写 为读 写打开一个文本文件 rb 读写 为读 写打开一个二进制文件 wb 读写 为读 写建立一个新的二进制文件 ab 读写 为读 写打开一个二进制文件 C语言文件操作方式 续 r read w write a append b binary 读写 18 1 用 r 方式打开的文件只能用于向计算机输入数据 而且该文件应该已经存在 4 标准文件操作方式的说明 1 5 2 用 w 方式打开的文件只能用于向该文件写数据 而不能用来向计算机输入 如果不存在该文件 则在打开时建立一个 如果存在该文件 则新写入的数据将覆盖掉以前的数据 3 如果希望向文件末尾添加新的数据 不希望删除原有数据 则应该用 a 方式打开 19 4 用 r w a 方式打开的文件可以用来输入和输出数据 5 在程序开始运行时 系统自动打开三个标准文件 标准输入 stdin 标准输出 stdout 标准出错输出 stderr 4 标准文件操作方式的说明 1 5 20 例 打开C盘根下的myfile c文件 验证文件能否正确打开 includevoidmain FILE fa if fa fopen c myfile c r NULL printf nCannotopenthefile exit 0 退出 elseprintf nOpen 提示 1 该文件在磁盘上不存在 存在时 比较运行结果 2 将程序中的 r 改为 w 当该文件在磁盘上不存在 存在时 比较运行结果 21 三 标准文件的关闭函数 fclose 关闭文件指针fp所指的文件 释放相应的文件信息区 正常关闭文件时 函数返回值为0 函数原型 intfclose FILE fp 功能 在使用完一个文件后应该关闭它 以防止它再被误用 22 函数原型 四标准文件读写函数 1 读文件字符函数 fgetc fp是指向所读文件指针变量 intfgetc FILE fp 函数功能 从文件指针fp指向的文件当前位置 位置指针 读出一个字符 然后文件位置指针自动后移 指向文件中的下一个字符 返回值为读入的字符 若遇到文件结束符 则返回结束符EOF 1 例 ch fgetc fp 23 例 将磁盘文件 mydata txt 的信息读出并显示到屏幕上 假设文件已经存在 若不存在 可以用记事本或其它文本编辑器编辑一个 includevoidmain FILE fp charc if fp fopen mydata txt r NULL printf nFilenotexist exit 0 while c fgetc fp EOF putchar c fclose fp 24 例11 3编写一个程序 实现DOS中的type命令的功能 includevoidmain intargc char argv FILE fp charc if argc 2 printf nNOfilename exit 0 if fp fopen mydata txt r NULL printf nFilenotexist exit 0 while c fgetc fp EOF putchar c fclose fp 25 2 文件写入字符函数 fputc 函数返回值 输出成功 返回值就是输出的字符 输出失败 返回一个EOF 值为 1 功能 把一个字符ch写到fp指向的磁盘文件上去 函数原型 intfputc intch FILE fp 例 FILE fp charch A fputc ch fp 26 putchar函数就是从fputc函数派生出来的 putchar c 是用 define定义的宏 defineputchar c fputc c stdout 同理 getchar函数是从fgetc函数派生出来的 getchar c 是用 define定义的宏 definegetchar c fgetc stdin 注 27 例11 4从键盘输入一些字符存到一个磁盘文件data dat中 以 结束 includevoidmain FILE fp charc if fp fopen data dat w NULL printf nFilecannotopen exit 0 while c getchar fputc c fp fclose fp 28 例11 5将文件filea dat的内容复制到文件fileb dat中 includevoidmain FILE f1 f2 if f1 fopen filea dat r NULL printf nFilecannotopen exit 0 if f2 fopen fileb dat w NULL printf nFilecannotcreat exit 0 while c fgetc f1 EOF fputc c f2 fclose f1 fclose f2 29 3 读文件字符串函数 fgets 从指针fp指向的文件中读取len 1个字符 把它送到由指针buf指向的字符数组中 char fgets char buf intlen FILE fp 函数原型 函数功能 字符数组的长度应大于len 可存放len 1个字符 字符数组的最后一个元素为 0 若在读入len 1个字符前遇到换行符 n 或文件结束符号EOF 立即结束读入操作 30 例11 6利用函数fgets 将文本文件filea txt中的内容全部读出并显示在屏幕上 分析 1 一般地 文本文件以行为单位 每行最多80个字符 再加上一个行结束符号即换行符 n 则每行至少需要81个字节的存储空间 2 使用函数fgets读取字符串时 若在读入len 1个字符完成之前遇到换行符 n 或文件结束符号EOF 立即结束读入操作 无论读入的字符是否等于或小于len 1个 函数为读入的字符串之后加一个 0 因此 读入的字符 包括 0 只有len个 3 定义文件指针 4 以只读方式打开文件 5 当文件未结束时 反复读出字符串并输出 6 关闭文件 31 includevoidmain FILE fp charstr 81 if fp fopen aa txt rt NULL printf Cannotopenfile getchar exit 1 while fgets str 81 fp NULL puts str fclose fp 例 利用函数fgets 将文本文件filea txt中的内容全部读出并显示在屏幕上 32 4 将字符串写入文件的函数 fputs char fputs char buf FILE fp 把由指针buf指向的字符数组中的字符串写入由指针fp指向的文件中 buf 字符串常量 字符数组名 指针变量 函数原型 函数功能 includevoidmain FILE fp charbuf 81 if fp fopen data txt a NULL printf Filecannotopen exit 0 while fgets buf 81 stdin NULL fputs buf fp fclose fp 例从键盘输入若干行字符 将它们添加到磁盘文件data txt中 34 5 数据块读写函数 fread和fwrite buffer 是一个指针 对于fread 它是读入数据的存放地址 对于fwrite 是要输出数据的地址 起始地址 size 要读写的字节数 count 要进行读写多少个size字节的数据项 fp 文件型指针 intfread void buffer intsize intcount FILE fp intfwirte void buffer intsize intcount FILE fp 函数原型 35 例11 8从键盘输入两个学生的信息 写入磁盘文件student dat中 分析 1 建立学生信息的结构体 2 定义文件指针 3 打开指定的文件 4 将学生信息写入文件 5 关闭文件 36 includesstructstudent charname 10 intnum intage charaddr 15 boy 2 pp definesizesizeof structstudent 37 voidmain FILE fp charch filename 20 inti gets filename 输入文件名 fp fopen filename wb 以读写方式打开二进制文件 也省略了检测 printf ninputdata n pp boy for i 0 iname pp num pp age pp addr fwrite boy size 2 fp fclose fp 将两个学生的信息写入文件 38 例11 9将磁盘文件student dat中的学生信息输出到屏幕上 includestructstu charname 10 intnum intage charaddr 15 boy 2 pp definesizesizeof structstu 39 voidmain FILE fp charch filename 20 inti gets filename pp boy fp fopen filename wb printf n nname tnumberageaddr n fread pp size 2 fp for i 0 iname pp num pp age pp addr fclose fp 40 一般调用方式为 6 格式化写读函数 fprintf和fscanf fprintf 文件指针 格式字符串 输出表列 fscanf 文件指针 格式字符串 输入表列 按照指定格式 向文件写 按照指定格式 从文件读 注意 fprintf和fscanf函数对磁盘文件读写printf和scanf函数对显示器或键盘操作 41 例如 fscanf fp d f 按格式字符串规定的格式 从fp指定的文件中读取数据分别送入变量i和t中 若磁盘文件上有以下字符 4 5 6则 4 i5 6 t fprintf fp d 6 2f i t 将整型变量i和实型变量t的值按 d和 6 2f的格式输出到fp指向的文件上 如果i 5 t 5 8 则输出到磁盘文件上的是以下的字符串 5 5 80 42 例11 10按指定的格式 将学生信息写入到一个二进制文件stud dat中 includestructstudent charname 10 intnum intage charaddr 15 boy 2 pp voidmain FILE fp charch filename 20 inti gets filename pp boya if fp fopen filename wb NULL printf Cannotopenfile getch exit 1 printf ninputdata n for i 0 iname pp num pp age pp addr pp boya for i 0 iname qq num qq age qq addr fclose fp 43 例11 11从文件stud dat中 按指定的格式 将学生信息读出并显示到屏幕上 includevoidmain FILE fp charch filename 20 inti structstudentboy 2 pp printf nfilename gets filename fp fopen filename rb for i 0 iname i pp printf s t 5d 7d s n pp name pp num pp age pp addr fclose fp 程序中结构体的说明参考例11 8 44 五文件的随机读写 移动文件位置指针的操作称为文件的定位 实现随机读写的关键是要按指定的条件进行文件的定位操作 文件定位操作是通过库函数的调用来完成的 在每个打开的文件中 有一个文件位置指针 它指向将要读写的字符位置 当对文件进行顺序读写时 每读完一个字符 该位置指针就自动移到下一个字符位置 在实际问题中 常要求读写文件中某些指定的部分 为了避免不必要的读或写的操作 可先移动文件的位置指针到需要读写的位置 再进行读写 这种读写操作方式称为随机读写 定位 随机读写 顺序读写 45 1 文件指针定位函数 rewind 函数原型 intrewind FILE fp 函数功能 把文件指针fp指向文件的内部位置指针移到文件首 2 文件指针定位函数 fseek 函数原型 intfseek FILE fp longoffset intpos 函数功能 将文件指针fp指向文件的内部位置指针从pos指定的位置开始移动offset个字节 46 起始点表示方法 offset为位移量 表示移动的字节数 要求位移量是long型数据 以便在文件长度大于64KB时不会出错 当用常量表示位移量时 要求加后缀 l 或 L 若offset为负数 表示向文件首方向移动 否则是向文件尾方向移动 pos为起始点 表示从何处开始计算位移量 规定的起始点有三种 文件首 当前位置和文件尾 47 例如 fseek fp 100L 0 文件指针从文件开始处向后移动100个字节fseek fp 60L 1 文件指针从当前位置向后移动60个字节fseek fp 10L 2 文件指针从文件末尾处向前移动10个字节 注意 位移量一般被要求是long型数据 这样当文件的长度大于64K时不致出问题 48 include stdio h voidmain FILE fp1 fp2 fp1 fopen file1 c r fp2 fopen file2 c w while feof fp1 putchar getc fp1 rewind fp1 while feof p1 putc getc fp1 fp2 fclose fp1 fclose fp2 例11 12有一个磁盘文件 第一次使它显示在屏幕上 第二次把它复制到另一文件上 49 例11 13在磁盘文件上存有10个学生的数据 要求将第1 3 5 7 9个学生数据输入计算机 并在屏幕上显示出来 includestructstudent type charname 10 intnum intage charsex stud 10 50 voidmain inti FILE fp if fp fopen stud dat rb NULL printf cannotopenfile n exit 0 51 for i 0 i 10 i 2 fseek fp i sizeof structstudent type 0 fread 52 六 文件的检测函数 1 文件结束检测函数feof函数原型 intfeof FILE fp 函数功能 判断fp指向的文件是否处于文件结束位置 如文件结束 则返回值为1 否则为0 2 文件出错检测函数ferror函数原型 intferror FILE fp 函数功能 检查文件fp在用各种输入输出函数进行读写时是否出错 若出错 返回值为1 否则返回0 3 文件出错标志和文件结束标志置0函数clearerr函数函数原型 intclearerr FILE fp 函数功能 用于清除出错标志和文件结束标志 使它们为0值 53 12 3非标准文件操作 标准文件的输入和输出称为高层I O 非标准文件的输入和输出称为低层I O 在非标准文件系统中 系统不会自动提供文件缓冲区 没有FILE文件指针 读写文件时和文件联系的是一个整数 称为文件号 54 一 非标准文件的打开 关闭 1 打开文件函数open 函数原型 intopen char filename intmode 函数功能 按mode指定的方式打开名为filename的文件 打开成功 函数返回一个正整数称为文件号 否则返回 1 filename是任意DOS文件名 可以是字符串常量或变量 mode是打开方式 可以用相应的符号常量或文件号 常用mode打开方式 55 例如 fp open ABC O WRONLY 或fp open ABC 2 表示以只写方式打开一个名为 ABC 的文件 若文件打开成功 将文件号赋给fd 否则fd为 1 函数open与函数fopen相似 都是打开文件 两者的区别 fopen是一个高级库函数 功能比open强 open是系统调用 是一个低级的内部函数 直接进入操作系统处理 56 2

温馨提示

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

评论

0/150

提交评论