已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章文件 第8章文件 8 2文件的打开与关闭 8 3文件的读写 8 4文件的指针定位 8 1文件概述 8 5文件的其他检测函数 8 6特殊的文件名 8 1文件概述 文件是存在计算机存储介质中的一些信息的集合 文件是一些记录 record 的集合 记录就是具有一定关系的信息的集合 在计算机中 将二进制代码的集合称为信息 文件的种类有很多 例如 文本文件 系统文件 图形 图像文件 视频文件 音频文件等等 每个文件都有一个名字 称之为文件名 文件的名字由两部分组成 文件名和扩展名 也称为文件后缀 文件名和扩展名之间用一个 号分开 扩展名是说明文件的属性 8 1文件概述 C语言在处理信息方面采用的是两种处理方法 一种是将文件看成是ASCII码的集合 在处理这个集合时以ASCII码为单位处理 由ASCII码组成的文件 又称为文本文件 另一种是将文件看成是二进制代码的集合 所谓文本文件 是把内存中的数据转变成相应的ASCII码值形式 然后存放在磁盘上 因此 每个字节存放一个字符的ASCII码值 所谓二进制文件 是把内存中的数据按其在内存中的存储形式原样存放到磁盘上去 8 1文件概述 shortint数据32767 32767的各字符的ASCII码存放形式 内存存放形式 8 1文件概述 数据按文本形式存储在磁盘上 占用的存储空间多 存储时要花费转换时间 但以这种形式存储 一个字节代表一个字符 便于对字符进行逐个处理 也便于输出显示数据按二进制形式存储在磁盘上时 无须花费转换时间 占用空间少 但字节不与字符对应 因此不能直接输出显示 8 1文件概述 缓冲文件系统输出时 先将数据送到内存缓冲区 缓冲区装满后 才将整个缓冲区的内容一次写入磁盘输入时 先把磁盘中的一块数据读入到内存缓冲区 然后再从缓冲区中把需要的数据挑出来 送到程序数据区中 8 2文件的打开与关闭 C语言执行程序在文件处理上有两种方式 一种是借助操作系统的外壳功能完成C程序在运行的过程中 数据的输入和输出 方式简单 条件比较苛刻 另一种方式是完全借助C语言的一些文件处理函数来完成C语言程序运行过程中的数据读入和输出 比较复杂 但功能强大 1 利用操作系统命令打开输入和输出文件 具有很大的局限性 比如 读取数据只能从头开始读取 不可剪裁读取数据 也不可对数据回读 输入和输出的数据文件只能是文本文件等 略 8 2文件的打开与关闭 2 利用函数处理文件在缓冲文件系统中 对每个正在使用的文件都自动分配一个FILE类型的结构体变量 用于存放文件的有关信息 如文件号 文件状态 缓冲区地址和大小等typedefstruct intlevel 缓冲区 满 或 空 的程度 unsignedflags 文件状态标志 charfd 文件描述符 unsignedcharhold 如无缓冲区不读取字符 intbsize 缓冲区大小 unsignedchar buffer 数据缓冲区位置 unsignedchar curp 文件定位指针 unsignedistemp 临时文件指示器 shorttoken 用于有效性检查 FILE 8 2文件的打开与关闭 C语言对于每一个要操作的文件 都必须定义一个指针变量 指向该文件结构体变量 这个指针称为文件指针FILE 指针变量标识符 打开文件操作 FILE fp fp fopen 文件名称 使用文件方式 关闭文件操作 fclose fp C文件操作常用函数 8 2文件的打开与关闭 8 2文件的打开与关闭 includevoidmain inta 16 i j t FILE fp1 fp2 fp1 fopen in dat r fp2 fopen out dat w for i 0 i 16 i fscanf fp1 d 8 2文件的打开与关闭 for i 0 i 16 i for j i 1 j 16 j if a i a j t a i a i a j a j t fprintf fp2 outputdataare n for i 1 i 16 i fprintf fp2 3d a i 1 if i 4 0 fprintf fp2 n fclose fp1 fclose fp2 8 2文件的打开与关闭 我们使用了两个函数一个是fscanf 另一个是fprintf 我们在表对比一他们与标准输入输出函数scanf printf的区别 8 2文件的打开与关闭 为了使得上述的程序更加完善 确保程序在运行过程中的正确性 这里我们引入一个新的函数exit 0 这个函数是结束程序的运行 FILE fp1 fp2 if fp1 fopen in dat r NULL printf cannotopeninfile n exit 0 不正确退出运行if fp2 fopen out dat w NULL printf cannotopenoutfile n exit 0 不正确退出运行 8 3文件的读写 1 fscanf 和fprintf 函数在上一小节中我们看到了这个函数的使用 他们的格式是 fscanf 文件指针 格式字符串 输入列表 fprintf 文件指针 格式字符串 输出列表 在他们的格式中 除了文件指针 其他的格式和scanf 和printf 函数是一致的 但是在使用中要注意写入的格式和读出的格式有一定的区别 8 3文件的读写 includevoidmain FILE fp inti k n fp fopen data dat w for i 1 i 6 i fprintf fp d i if i 3 0 fprintf fp n fclose fp fp fopen data dat r fscanf fp d d 8 3文件的读写 2 fputc 和fgetc 1 函数的功能就是将字符写入到fp所指向的文件中去 它在 语言的头文件中定义的格式为 intfputc intc FILE fp 调用方式为 fputc ch fp ch是一个字符变量 也可是字符常量 fp是文件的指针 如果输出成功 这个函数返回的值就是这个函数输出的字符 否则 返回EOF 也就是 1 include includevoidmain FILE fp charch filename 12 printf Pleaseinputfilename scanf s filename if fp fopen filename w NULL printf cannotopeninput file s n filename exit 0 printf Pleasebegininputstring n ch getchar while ch getchar n fputc ch fp fclose fp 8 3文件的读写 2 fgetc 函数是从一个打开的磁盘文件中读取一个字符 它在 语言的头文件中定义的格式为 intfgetc fp 调用方式为 ch fgetc fp 其中ch是一个字符变量 fp是一个文件的指针 include includevoidmain FILE fp charch filename 12 printf Pleaseinputfilename scanf s filename if fp fopen filename r NULL printf cannotopeninput file s n filename exit 0 printf beginoutputstring n while ch fgetc fp EOF putchar ch putchar n fclose fp 8 3文件的读写 includevoidmain intargc char argv FILE fp1 fp2 charch if argc 3 printf Inputargumenterror exit 0 if fp1 fopen argv 1 r NULL printf cannotopensource file s n in file exit 0 if fp2 fopen argv 2 w NULL printf cannotopenobject file s n out file exit 0 while ch fgetc fp1 EOF fputc ch fp2 fclose fp1 fclose fp2 完成文件复制 8 3文件的读写 3 fread 函数和fwrite 函数这两函数也是向一个打开的文件内写入和读出数据 但使用方式有所不同 1 fwrite 是将某一个二进制数据写入到磁盘文件中 该函数的格式为 intfwrite void buffer intnum byte intcount fp void buffer数据缓冲区 intnum byte所要读取文件的字节数 intcount注明所要读取数据的倍数 fp文件指针 8 3文件的读写 将下列矩阵的数据保存在给定的数据文件中 include include include defineCOL4 defineROW3 defineF16 voidmain FILE fp floata 3 4 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 charw name 10 inti j float p 4 printf Pleaseinputw name scanf s w name if fp fopen w name wb NULL printf Cannotopenfile n exit 0 p a for i 0 i ROW i fwrite p i F COL fp fclose fp 8 3文件的读写 2 fread 是将某一个二进制数据读入到数据缓冲区 该函数的格式为 intfread void buffer intnum byte intcount fp 该函数共有四个参数void buffer数据缓冲区 intnum byte所要读取文件的字节数 intcoun注明所要读取数据的倍数 fp文件指针 我们用fread 函数将上题数据读入到一个数组中去 include include include defineCOL4 defineROW3 voidmain FILE fp floatb 3 4 0 读出用写入的同种方式charr name 10 inti j float p 4 printf Pleaseinputr name scanf s r name if fp fopen r name rb NULL printf Cannotopenfile n exit 0 p b for i 0 i ROW i fread p i sizeof float COL fp 写入的方式相同fclose fp for i 0 i ROW i 显示读出的结果 for j 0 j COL j printf 4g b i j printf n 8 3文件的读写 4 其他读写函数 1 putw 和getw 函数这两个函数是将一个整型数写到文件中或者从一个文件中读取一个整数 注意一个整型数占用2个字节 但有一个必要条件 它所打开的文件一定是二进制文件格式 它们的使用方式是 putw a fp a getw fp 其中a为一个整数 fp为文件指针 也可直接将以整数写入到文件中 其格式为 putw 10 fp include includevoidmain FILE fp inta i if fp fopen data dat wb NULL printf cannotopeninput file data dat n exit 0 for a 0 a 15 a putw a fp fclose fp if fp fopen data dat rb NULL printf cannotopenoutput file data dat n exit 0 for i 0 i 15 i a getw fp printf 2x n a printf n fclose fp 8 3文件的读写 2 fgets 和fputs 函数这两个函数是将一个字符串写入到一个文件中 他们的格式为 fgets str n fp fputs str fp str为字符串数组或者字符串指针 n为读出的字符个数 fp为文件指针 这里打开的文件方式没有明确的要求 可以是文本方式也可以是二进制方式 include includevoidmain FILE fp char str1 abcdefghijklmnopqrstuvwxyz str2 30 intn 26 if fp fopen data dat w NULL printf cannotopenoutput file data dat n exit 0 fputs str1 fp fclose fp if fp fopen data dat r NULL printf cannotopeninput file data dat n exit 0 fgets str2 n 1 fp 起始位置为 0 读取n 1个printf str s n str2 fclose fp 8 4文件的指针定位 C语言打开的每个文件 都有一个文件指针牵引 文件指针是一看不见游标 当你对文件进行一次读写 该指针都会自动的加 1 这个对初学者是一个比较难理解的概念 也是难以运用的一种方式 但是 我们对文件进行操作时难免需要指针按照我们的意识进行运动 这样我们就要对指针的运行方向 要有具有能控制的方式 8 4文件的指针定位 1 rewind 函数该函数被称之回绕函数 来源于磁带机的 倒带 早期计算机的外部大型数据存储器是由盘式磁带机完成的 当一盘数据被读取完成 就需要将磁带回绕 以便下一次读取数据时使用 在C语言中 将其引申为指针归位 就是将指针指向文件头 无论指针当前在什么位置 其格式为 rewind fp 8 4文件的指针定位 include includevoidmain FILE fp inta i if fp fopen data dat wb NULL printf cannotopeninput file data dat n exit 0 for a 0 a 15 a putw a fp rewind fp for i 0 i 15 i a getw fp printf 2x a printf n fclose fp 8 4文件的指针定位 2 fseek 函数该函数可将当前文件指针所指位置再次定位fseek 文件指针 位移量 起始点 其函数原型为 intfseek fp longnum byte intorigin fp 为文件指针 longnum byte 长整形数 位移量 正数表示向文件尾的方向移动指针 负表示向文件头的方向移动指针 intorigin 0 表示从文件头开始 1 表示从当前位置开始 2 表示文件尾开始 8 4文件的指针定位 include includevoidmain FILE fp char str1 abcdefghijklmnopqrstuvwxyz ch inti n 26 if fp fopen data dat w NULL printf cannotopenoutput file data dat n exit 0 fputs str1 fp rewind fp for i 0 i n 1 i 2 ch fgetc fp fseek fp 1 1 printf c ch printf n fclose fp 8 4文件的指针定位 3 ftell 函数该函数是报告文件指针的当前位置 一般是一整数的形势报告 该函数的书写格式为 ftell fp fp为文件指针 如果该函的返回值为 1L则认为表示出错 具体用法用例题加以说明 8 4文件的指针定位 voidmain FILE fp char str1 abcdefghijklmnopqrstuvwxyz ch intj i n 26 if fp fopen data dat w NULL printf cannotopenoutput file data dat n exit 0 fputs str1 fp rewind fp for i 0 i n 1 i j ftell fp printf j 2d j fseek fp i 0 ch fgetc fp printf c ch if i 1 4 0 printf n printf n fclose fp 8 5文件的其他检测函数 还有一些关于文件出错处理的函数 这些函数一般是给系统管理员编程时使用的 1 feof 该函数的功能是判断函数指针是否已经指向文件尾 往往我们对打开的文件的内容是不清楚的 尤其是其长度 所起要想将一个文件的内容全部处理 只能借助该函数加以完成 该函数原型为 intfeof fp 其中fp为文件指针 当给出一文本文件名称后将其内容显示在屏幕上 include includevoidmain FILE fp charfilename 12 printf Pleaseinputfilename scanf s filename if fp fopen filename r NULL printf cannotopeninput file s n filename exit 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年村委会春节期间工作安排方案
- 2026年小班上学期消防安全计划及措施
- 2026年消防队下半年工作计划
- 基于云计算的医院成本核算平台构建
- 2026年消防安全安排部署方案
- 护理人文关怀汇报
- 2025年功能性饮料包装视觉冲击力
- 2026年职业生涯规划消防
- 合并恶性肿瘤心源性脑卒中抗栓治疗出血风险评估方案
- 双特异性抗体与免疫检查点抑制剂联用
- GINA哮喘指南核心更新解读2026
- 2025年甘孜州船头学校选调事业单位工作人员真题
- 2026年汽车维修前台测试题及答案
- 2026福建厦门公交集团有限公司公交招聘考试备考试题及答案解析
- 2026年职业能力倾向验-通关题库及1套参考答案详解
- 2026中国兵器审计中心(西南中心)招聘6人笔试参考题库及答案解析
- 2026云南曲靖市沾益区高投物业服务有限公司物业工作人员招聘6人笔试模拟试题及答案解析
- GB/Z 177.7-2026人工智能终端智能化分级第7部分:汽车座舱
- SB/T 11067-2013金属材料仓储技术与管理规范
- GB/T 7674-2020额定电压72.5 kV及以上气体绝缘金属封闭开关设备
- 第九章配送中心规划
评论
0/150
提交评论