程序设计基础C语言文件操作PPT课件_第1页
程序设计基础C语言文件操作PPT课件_第2页
程序设计基础C语言文件操作PPT课件_第3页
程序设计基础C语言文件操作PPT课件_第4页
程序设计基础C语言文件操作PPT课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1 第13章文件操作 2 内容提要 二进制文件和文本文件 文件的打开和关闭 文件的顺序读写与随机读写 3 VonJ Neumannarchitecture 大脑 记忆装置 Memory 眼睛和耳朵 I Odevices Wheretoputdataincomputer Howtoinputoroutputdata 4 I O设备 输入设备键盘 鼠标软盘 硬盘 光驱 以文件的形式 扫描仪 视频采集卡 电视卡 游戏杆 话筒 输出设备显示器 打印机软盘 硬盘 CD DVD RW 以文件的形式 音箱 5 内存 程序运行时申请 程序结束时释放 无法保存数据 数据会随着程序的结束而丢失 includestructstudent intnum charname 10 floatscore 3 voidmain structstudentstu 3 inti printf 请输入学生信息 n for i 0 i 3 i scanf d s f f f 6 如何在程序结束后依然保留数据 以文件的形式放在外存上 文件 存储在外存上有名字的一组相关数据的集合 7 文件的存放 Storage 可以建立若干文件目录 directory folder文件夹 在目录里保存文件同一级目录里保存的文件不能同名对使用者而言 只要知道文件的路径 path 全目录 和文件名 就能使用该文件C home Sunner main c这都是托OS的福 8 13 1二进制文件和文本文件 二进制文件是一种字节序列 没有字符变换按照数据在内存中的存储形式 二进制 存储到文件如短整数123 在内存占2个字节 则文件中也占2个字节文本文件 ASCII码文件是一种字符序列 文件中存储每个字符的ASCII码如整数123在文件中占3个字节 分别存放这3个字符的ASCII码 如果存整数1234呢 9 ASCII文件和二进制文件的比较 ASCII文件便于对字符进行逐个处理 也便于输出字符 但一般占存储空间较多 而且要花费转换时间 二进制文件可以节省外存空间和转换时间 但一个字节并不对应一个字符 不能直接输出字符形式 一般中间结果数据需要暂时保存在外存上 以后又需要输入内存的 常用二进制文件保存 10 文件的格式 FormatofFiles 数据必须按照存入的类型读出 才能恢复其本来面貌公开的标准格式如bmp tif gif jpg和mp3等类型的文件 有大量软件能生成和使用这些类型的文件不公开或加密的文件格式如MicrosoftWord的doc格式就不公开 所以至今没有Word以外的其它软件能完美地读出doc文件 11 所有有关文件的操作都离不开文件指针用文件指针代表一个文件 对文件的操作都是通过相应文件的文件指针来完成文件指针是C为我们提供的一种文件类型的指针变量 它的具体定义方法是FILE fp 有了这样的定义之后 fp就可以指向一个文件 12 文件指针 FilePointer includeFILE fp typedefstruct shortlevel 缓冲区 满 或 空 的程度 unsignedflags 文件状态标志 charfd 文件描述符 unsignedcharhold 如无缓冲区不读字符 shortbsize 缓冲区的大小 unsignedchar buffer 数据缓冲区的位置 unsignedchar curp 指针当前的指向 unsignedistemp 临时文件指示器 shorttoken 用于有效性检查 FILE 在stdio h文件中定义 对文件的操作都是通过各种函数来实现的 13 13 2文件的打开和关闭 文件的打开 fopen 函数 FILE fopen constchar filename constchar mode FILE fp fopen C CONFIG SYS rw filename是文件名包含路径 如果不含路径 表示打开当前目录下的文件mode是打开方式常用为 r w rw 和 a 分别表示只读 只写 读写和添加 rb 表示只读二进制文件返回值为指向此文件的指针 留待以后使用如果打开失败 返回值为NULL 14 文件打开方式 mode 对应二进制文件 对应文本文件 15 13 2文件的打开和关闭 文件的关闭 fclose 函数 intfclose FILE fp 使文件指针变量和文件脱钩 释放文件所占的缓冲区fclose函数的返回值当顺利地执行了关闭操作 返回值为0 如果返回值为非零值 表示关闭时有错误 一般只有驱动器中无盘或盘空间不够时才失败 关闭失败会引起数据丢失 文件的破坏和程序中的随机错误 16 例 文件的打开和关闭 includevoidmain FILE fp if fp fopen test txt r NULL printf Failuretoopendemo txt n exit 0 fclose fp 17 13 3按字符读写文件 字符读写intfgetc FILE fp 从fp读出一个字符 将位置指针指向下一个字符若读成功 则返回该字符 若读到文件尾 则返回EOF EOF是一个符号常量 在stdio h中定义为 1 intfputc intc FILE fp 向fp输出字符c若写入错误 则返回EOF 否则返回c 18 13 3按字符读写文件 例13 1 从键盘键入一串字符 转存到磁盘文件上 include includevoidmain FILE fp charch if fp fopen demo txt w NULL printf Failuretoopendemo txt n exit 0 ch getchar while ch n fputc ch fp ch getchar fclose fp 19 include includevoidmain FILE fp charch inti if fp fopen demo bin wb NULL printf Failuretoopendemo bin n exit 0 for i 0 i 128 i fputc i fp fclose fp if fp fopen demo bin rb NULL printf Failuretoopendemo bin n exit 0 while ch fgetc fp EOF putchar ch fclose fp 例13 2 将0 127之间的ASCII字符写到文件中 然后从文件中读出并显示到屏幕上 函数feof 检查是否到达文件尾 当文件位置指针指向文件尾时 返回非0值 否则返回0值 20 例13 3 修改例13 2 从文件中读出字符时 判断是否为可打印字符 若是则显示该字符 否则显示其十进制ASCII码值 while ch fgetc fp EOF if isprint ch printf c t ch elseprintf d t ch 21 例 复制文件 include includevoidmain FILE in out charinfile 10 outfile 10 printf Entertheinfilename n scanf s infile printf Entertheoutfilename n scanf s outfile if in fopen infile rb NULL printf cannotopeninfile n exit 0 if out fopen outfile wb NULL printf cannotopenoutfile n exit 0 while feof in fputc fgetc in out fclose in fclose out 22 例 复制文件 利用命令行参数输入两个文件名 include includemain intargc char argv FILE in out if argc 3 printf Youforgottoenterafilename n exit 0 if in fopen argv 1 rb NULL printf cannotopeninfile n exit 0 if out fopen argv 2 wb NULL printf cannotopenoutfile n exit 0 while feof in fputc fgetc in out fclose in fclose out 23 13 5按数据块读写文件 按数据块读写从fp所指的文件中读取数据块并存储到buffer指向的内存中buffer是待读入数块据的起始地址size是每个数据块的大小 待读入的每个数据块的字节数 count是最多允许读取的数据块个数 每个数据块size个字节 返回实际读到的数据块个数将buffer指向的内存中的数据块写入fp所指的文件 24 使用举例 若文件以二进制形式打开 fread f 4 2 fp 此函数从fp所指向的文件中读入2个4个字节的数据 存储到指针f所指向的空间中 25 使用举例 若有如下结构类型 structstudent type charname 10 intnum intage charaddr 30 stud 40 可以用fread和fwrite来进行数据的操作 for fread fread stud sizeof structstudent type 40 fp fwrite stud sizeof structstudent type 40 fp 26 例从键盘输入 个学生的有关数据 然后把它们转存到磁盘文件上去 include defineSIZE4typedefstructstudent type charname 10 intnum intage charaddr 15 STUDENT voidmain voidsave STUDENTstud STUDENTstud SIZE inti for i 0 i SIZE i scanf s d d s stud i name 27 voidsave STUDENTstud FILE fp inti if fp fopen stu list wb NULL printf cannotopenfile n return for i 0 i SIZE i if fwrite 28 例验证上面程序生成的stu list文件是否存在 从文件中读出数据并显示在屏幕上 include defineSIZE4structstudent charname 10 intnum intage charaddr 15 voidmain structstudentstud inti FILE fp if fp fopen stu list rb NULL printf 打开文件错误 n return for i 0 i SIZE i fread 29 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 30 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 31 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 32 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 33 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 34 例13 7 在例12 7基础上 计算每个学生的4门课程的平均分 将学生的各科成绩及平均分输出到文件student txt中 然后再从文件中读出数据并显示到屏幕上 35 13 3按字符读写文件 字符串读写char fgets char s intn FILE fp 从fp所指的文件中读取字符串并在字符串末尾添加 0 然后存入s 最多读n 1个字符当读到回车换行符 文件末尾或读满n 1个字符时函数返回该字符串的首地址intfputs constchar s FILE fp 将字符串写入文件中若出现写入错误 则返回EOF 否则返回一个非负数 36 13 4按格式读写文件 格式化读写intfscanf FILE fp constchar format fscanf fp d f 第1个参数为文件指针 第2个参数为格式控制参数 第3个参数为输出参数表列 37 文件读写函数 分类函数名功能打开文件fopen 打开文件关闭文件fclose 关闭文件文件读写fgetc 从指定文件取得一个字符fputc 把字符输出到指定文件fgets 从指定文件读取字符串fputs 把字符串输出到指定文件fread 从指定文件中读取数据项fwrite 把数据项写到指定文件中fscanf 从指定文件按格式输入数据fprintf 按指定格式将数据写到指定文件中 38 13 6扩充内容 13 6 1文件的随机读写 fseek 改变文件位置指针的位置rewind 使文件位置指针重新置于文件开头ftell 返回文件位置指针的当前值 39 rewind函数 使位置指针重新返回文件的开头 无返回值 例有一个磁盘文件 第一次将它的内容显示在屏幕上 第二次把它复制到另一文件上 includevoidmain FILE fp1 fp2 fp1 fopen file1 c r fp2 fopen file2 c w while feof fp1 putchar fgetc fp1 rewind fp1 while feof fp1 fp

温馨提示

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

评论

0/150

提交评论