• / 67
  • 下载费用:10 金币  

C语言程序设计(文件)

关 键 词:
语言程序设计 文件
资源描述:
第十章 文件 C语言程序设计课程组语言程序设计课程组 马迪芳马迪芳 2 2 本章导学 一 导入 文件是计算机应用系统的基础 使用文件可以存储程序 文档 数据等各种 各样的信息 本章介绍如何在程序中读取文件数据 创建文件和将数据写入文件 通过本章的学习 掌握文件指针的概念 文件的打开和关闭的方法以及文件 的顺序读写和随机读写 能熟练地选择合适的文件操作函数完成程序和文 件的数据交互 3 3 本章导学 二 本章重点 1 文件指针的概念 2 文件的打开的方式和意义 3 文件的关闭的方式和意义 4 随机文件的定位 5 文件的读 写方式 包括字符 字符串 块和格 式读 写的方式 4 4 本章导学 三 本章难点 1 文件指针和位置指针的差别 2 各种读 写方式中判断文件读 写完毕的方式 5 5 第一单元 文件的概念与基本操作 1 文件 文件指针 2 文件的操作过程和文件打开和关闭的实现 6 6 1 文件概述文件概述 文件是一组相关数据的有序集合 这组数据的集合名 称就是文件名 一个文件名通常由两个部分构成 基本文件名和扩展 名 在Windows操作系统中 不同扩展名有不同的 含义 如扩展名为 txt表示文本文件 而 jpg则表示 图片文件 操作系统分别用相应的应用程序来管理这 些文件 7 7 1 文件概述文件概述 文件通常存在于外存储器 如硬盘 光盘 U 盘等 上 在使用时才被调入内存 8 8 2 文件的分类文件的分类 文件的种类有很多 按照不同的划分标准可以将文件分 为不同的类型 从文件内容的角度 可分为程序文件和数据文件 从文件组织形式的角度 可分为顺序存取文件和随机 存取文件 从用户的角度 文件可分为普通文件和设备文件 9 9 2 文件的分类文件的分类 从文件编码的方式来看 文件可分为文本文件和二进 制文件 文本文件使用单独的字符编码 如ASCII编码或UNICODE编码 存储每个单独的字符 如 字母 数字 美元符号或小数点 等 可在屏幕上按字符显示 可以使用通用的文本编辑器编辑 ASCII码文件的每1个字节存储1个字符 因而便于对字符进行 逐个处理 但一般占用存储空间较多 而且要花费转换时间 二进制与ASCII码之间的转换 1010 2 文件的分类文件的分类 二进制文件按一定的二进制编码方式来存放数据 其 内容并不是可读字符 在二进制文件中数字数字以真正的二进制方式存储二进制方式存储 然而 只有字符字符保留它们的ASCII字符码字符码形式 优点优点 可以节省存储空间和转换时间 因为一个二进 制文件的存储代码与计算机内部存储代码相匹配 1111 2 文件的分类文件的分类 例如 十进制数1234以ASCII码存储的形式为 00110001 00110010 00110011 00110100 其中每八位对应一位十进制 数 该例的对应关系如图所示 而十进制数1234的二进制存储形式为 11010010 即存储的是 1234的实际二进制值 1212 3 文件指针文件指针 C语言中是使用一个指针变量指向文件结构 这个指针称为文件指针 通过文件指针就可 对所关联的文件进行各种操作 1313 3 文件指针文件指针 说明文件指针的语法格式为 FILE 指针变量 FILE是由stdio h定义的一个结构名 该结构中定 义的成员表示了成员表示了对文件进行操作所需要的相关信 息 如文件名 文件状态和文件当前位置文件名 文件状态和文件当前位置等 程 序员在编写文件读写程序时 并不需要关心FILE 结构的具体细节 1414 3 文件指针文件指针 定义的指针变量指向一个具体的FILE结构 通过该指针变 量可找到对应文件的结构 从而可以实施对该文件的相关 操作 例如 FILE fp 表示定义了一个指针变量fp 其为FILE结构体类型 可使fp指向 跟某个文件相关联的结构体变量 该变量包含了该文件的相关 信息 比如文件名 文件状态和文件位置等 上 通常称fp指指 向该文件 向该文件 1515 4 缓冲区缓冲区 程序在操作文件的时候有这样如下问题 1 是磁盘文件的读写单位要比程序处理数据时的单位大 比 如磁盘存取单位为 簇 一般在32位计算机上其大小是4096 字节 而程序给变量等赋值的大小远小于此 2 CPU的读写速度远大于磁盘的读写速度 如果每处理一 个数据就去磁盘取会极大的影响程序执行效率 1616 4 缓冲区缓冲区 基于这种情况 在实际的计算机系统中 程序和磁盘间并不直接交 换数据 而是在两者之间通过一块内存区域联系起来 程序在写文件写文件时 先把数据写到这块区域中 等到该区域放满后 数据再统一被送到磁盘的文件中 读文件读文件时也是先将磁盘上的整块数据送入该区域 程序从该区域 取出所需数据处理 这块内存区域就称为缓冲区缓冲区 缓冲区根据 一定的原则可以设为一个或多个设为一个或多个 1717 4 缓冲区缓冲区 1818 第一单元 文件的概念与基本操作 1 文件 文件指针和缓冲区 2 文件的操作过程和文件打开和关闭的实现 1919 1 文件的操作过程 程序中操作文件是将数据从文件中读入内存供程序处理 当程序处理完毕将需要永久保存的数据从内存写到外存 该过程步骤如下 1 打开文件 打开文件 2 读文件或写文件 读文件或写文件 3 关闭文件 关闭文件 2020 2 文件的打开与关闭文件的打开与关闭 文件在进行具体的读写操作之前必需先打开 在使用 完毕后一定要关闭 打开文件 实际上是建立被操作文件的各种有关信息 并使文件指针指向包含这些信息的结构 从而将文 件关联到应用程序 以便进行各种文件操作 2121 2 文件的打开与关闭文件的打开与关闭 而关闭文件则是断开指针与对应文件之间的 联系 也就禁止了对该文件进行的各种操作 在C的标准库函数中 打开文件使用fopen 函数 关闭文件使用fclose 函数 2222 3 文件的打开文件的打开 使用fopen 函数可以打开一个文件 具体语法为 FILE fopen const char const char 通常将返回的文件指针赋值给一个文件指针变量 文件指针变量名 fopen 文件名 文件使用方式 2323 3 文件的打开文件的打开 文件指针变量名 fopen 文件名 文件使用方式 文件指针变量名必须是FILE 类型 文件名是指被打开的文件名 可能包括文件对应的路径信息 为字 符串常量 例如 当前目录下文件myData data对应的文件名字符 串为 myData data 文件使用方式是指被操作文件的具体类型文件的具体类型和相关的操作要求相关的操作要求 如打 开文件是文本文件还是二进制文件 是 读 文件还是 写 文件 文件使用方式由 r w a t b 六个字符拼成 2424 3 文件的打开文件的打开 文件使用方式 Rread 只读 Wwrite 只写 Aappend 在文件末尾追加内容 Ttext 文本文件 默认值 可省略 Bbinary 二进制文件 同时可对文件进行读和写 2525 3 文件的打开文件的打开 文件使用方式的组合及含义 r 读写 为读和写打开一个文本文件 w 读写 为读和写建立一个新的文本文件 a 读写 为读和写打开一个文本文件 rb 读写 为读和写打开一个二进制文件 wb 读写 为读和写建立一个新的二进制文件 ab 读写 为读和写打开一个二进制文件 2626 3 文件的打开文件的打开 FILE inFile outFile fopen prices txt w fileOut fopen prices dat wb inFile fopen prices txt r 2727 3 文件的打开文件的打开 2828 4 文件的关闭文件的关闭 文件使用完毕后 应该关闭文件 以避免文件的数据丢 失等错误 关闭文件使用fclose 函数 语法格式 int fclose FILE 正常完成关闭文件操作时 fclose 函数返回值为0 如 果返回非零值 则表示有错误发生 如磁盘满 移动存 储设备已移走或者I O读写错误 2929 4 文件的关闭文件的关闭 可以通过检查fclose 函数的返回值来确定文件 是否正确关闭 if fclose fp 0 printf a关闭文件时发生错误 n 第二单元 文件的读写 1 文件的字符读写函数 2 文件的字符串读写函数 3 文件的数据块读写函数 4 文件的格式化读写函数 3131 1 文件的读写文件的读写 在C的标准库函数中提供了多种文件读写的函数 常用的文件读 写函数包括 1 字符读写函数 fgetc 和fputc 以字符 字节为单位 读写 2 字符串读写函数 fgets 和fputs 一次读写一个字符 串 3 数据块读写函数 fread 和fwrite 读写一个数据块 4 格式化读写函数 fscanf 和fprinf 按指定格式读写 数据 3232 2 fgetc fgetc 函数可用于读取文本文件或者二进制文件 其功 能是从指定的文件当前位置读取一个字符 实际是读取 一个字节 函数调用的语法为 int fgetc FILE 返回的结果为对应字节的整数值 如果为文本文件 返 回结果就是对应字符的ASCII码的值 3333 2 fgetc 在文件结构FILE中有一个位置指针一个位置指针用来指向文件的当前读写字节 在 文件打开时文件打开时 该指针是指向文件的第一个字第一个字节 每次使用fgetc 函数读出一个字节 文件内部位置指针会自动向后移 动一个字节 因此 连续多次使用fgetc 函数 可连续读取多个字节 的数据 当到达文件末尾时 fgetc 函数会返回EOF值值 End Of File 文件 结束标记 可据此来判断文件是否结束 3434 2 fgetc 例10 1 读取指定的文本文件内容并显示在屏幕的实 例 在循环中使用fgetc 函数来依次读取文件中的每个 字符并显示在屏幕上 同时统计字符个数 并在程序结 束前输出文件中字符的个数 例10 1 3535 3 fputc fputc 函数可用于写入文本文件或者二进制 文件 其功能是把一个字符 或字节 写入 指定文件的当前位置 3636 3 fputc 语法格式为 int fputc int FILE 例如 fputc a outFile 函数中 第一个参数为要写入字符写入字符 或字节字节 对应的整数值 第二个参数为被写入文件对应的文件指针 如写入文件成功则 返回返回写入的字符字符 否则返回一个EOF值值 可据此来判断写入是 否成功 每写入一个字符 文件内部读写位置指针会自动向后移动一个 字节 3737 3 fputc 例10 2 使用fgetc 和fputc 函数实现文件的复 制功能 使用命令行参数传递源文件和目的文件的文 件名 如命令行参数中只有一个文件名则把该文件内 容输出到标准输出 例10 2 第二单元 文件的读写 1 文件的字符读写函数 2 文件的字符串读写函数 3 文件的数据块读写函数 4 文件的格式化读写函数 3939 1 fgets 函数fgets 只用于读取文本文件 其功能是从指定的文本文件 中读取一个指定长度的字符串 语法格式为 char fgets char s int n FILE fp 其中 s为读取结果保存的字符串 可以是字符数组字符数组或字符指字符指 针针 n是正整数 表示从文件中读出不超过不超过n 1个字符 在 读入的最后一个字符后加上字符串结束标志最后一个字符后加上字符串结束标志 0 fp则表示 文本文件对应的文件指针 函数的返回结果返回结果为字符串s的首的首 地址 地址 4040 1 fgets 函数fgets 在读出n 1个字符之前 1 如果遇到了换行符 则函数结束 返回包括换行符在内的字符串 2 如果遇到了EOF 则函数结束 返回EOF之前的字符串 3 如果文件一行中字符数大于大于n 1个 连续使用该函数读取会返 回多个n 1个字符的字符串 4 fgets 函数检测到一个文件的结束时返回一个NULL 而 fgetc 检测到文件的结束时返回的是EOF A First Book of ANSI C A First Book of ANSI C 41 直到80字符已被读取 或遇到 换行符 1 1 fgets 4242 1 fguts 例10 3 使用fgets 读取文本文件的内容 每次读取10个字符 同样实现了读取指定 的文本文件内容并显示在屏幕的功能 例10 3 4343 2 fputs 函数fputs 只用于写入文本文件 其功能是向指定的 文本文件中写入一个字符串 语法格式为 int fputs const char str FILE fp 其中 str为要写入的字符串内容 可以是字符串字符串 常量 字符数组名或字符指针常量 字符数组名或字符指针 fp则表示文本文 件对应的文件指针 4444 2 fputs 例10 4 读取键盘输入的字符串 将输入 的字符串添加到文本文件末尾 例10 4 第二单元 文件的读写 1 文件的字符读写函数 2 文件的字符串读写函数 3 文件的数据块读写函数 4 文件的格式化读写函数 4646 1 fread 和和fwrite 函数fread 和fwrite 用于整块数据的读写 一般用来从文件读写一组二进制数据 4747 1 fread 和和fwrite 具体的语法格式如下 int fread void buf int size int count FILE fp int fwrite const void buf int size int count FILE fp 参数buf是指针 在fread 中表示存放读入数据缓冲区的首 地址 在fwrite 中表示存放输出数据的缓冲区首地址 参数size表示需要读写的数据块大小 以字节数作为单位 参数count表示要连续读写的数据块数 fp表示读写文件对应的文件指针 4848 1 fread 和和fwrite 例10 6 使用数据块读写函数从键盘输入两个学生 记录 写入文件studentRecord dat中 再读出这两 个学生的记录数据显示在屏幕上 例10 6 第二单元 文件的读写 1 文件的字符读写函数 2 文件的字符串读写函数 3 文件的数据块读写函数 4 文件的格式化读写函数 5050 fscanf 和fprintf fscanf fprintf 函数与scanf 和printf 函数的 功能相似 是格式化读写函数 但读写对象是文本文 件 fscanf 函数是从指定的文件中 按照格式字符串格式字符串中 指定的格式 读取对应的数据 fprintf 函数则是将数据按照指定的格式按照指定的格式写入到指定 的文件中 5151 fscanf 和fprintf 格式字符的含义和scanf 和printf 函数中完全一致 具体的 语法格式如下 int fscanf FILE fp const char format int fprintf FILE fp const char format 例10 5 使用格式化读写函数从键盘输入两个学生数据 写 入一个文件中 再读出这两个学生的数据显示在屏幕上 例10 5 第三单元 随机文件的操作 1 文件的随机操作 2 文件的检测 5353 文件的定位文件的定位 在使用文件时 并不一定是从文件开始一直读写到文 件结束 如果读写文件数据时 需要前后移动文件位 置的指针 在移动文件读写位置到需要的位置后 再 进行读写 这种读写就称为随机读写 随机读写多用 于二进制文件的读写 实现随机读写的关键是要按要求移动读写位置的指关键是要按要求移动读写位置的指 针针 称为文件的定位文件的定位 5454 文件的定位文件的定位 文件定位函数主要有3个 1 rewind 函数用于将文件读写位置移到文件开 始 语法格式如下 void rewind FILE fp 其中 fp为文件对应的文件指针 2 fseek 函数用于将文件读写位置移到文件内部 指定位置 5555 文件的定位文件的定位 int fseek FILE fp long offset int startpos 其中 fp为文件对应的文件指针 offset表示移动的字节数 为正数时为正数时 表示从起始 点往后的字节数 为负数时为负数时 表示从起始点往前的 字节数 要求位移量是long型数据 当用常量表示 位移量时 要求加后缀 L startpos表示起始点 也就是从何处开始计算位移 量 起始点有三种 文件首 当前位置和文件尾 5656 文件的定位文件的定位 文件定位的起始点 起始点表示符号数字表示 文件首SEEK SET0 当前位置SEEK CUR1 文件末尾SEEK END2 例如 fseek file 0L SEEK SET 语句是移动到文件开 始 5757 文件的定位文件的定位 在移动位置指针之后 即可用前面介绍的任一种读写 函数进行文件的随机读写 由于一般是读写二进制文 件的一个数据块 常用fread 和fwrite 3 ftell 函数用于获取文件的当前位置 语法格式为 long ftell FILE 函数的返回结果是用相对于文件开始的位移量相对于文件开始的位移量来表 示 出错时返回 1L 5858 文件的定位文件的定位 例10 7 使用fseek 定位 在文件 studentRecord dat中读出第二个学生的记 录数据 例10 7 第三单元 随机文件的操作 1 文件的随机操作 2 文件的检测 6060 文件的检测文件的检测 除了文件打开 关闭 读写 定位外 C语言中还提供 文件检测用的函数 常用的文件检测函数有 1 文件结束检测函数 int feof FILE 判断文件是否处于文件结束位置 如文件结束 则返回 值为1 否则为0 6161 文件的检测文件的检测 2 读写文件出错检测 int ferror FILE 检查文件读写时是否出错 返回值为0表示未出错 否则表示有错 可根据返回参数值来确定具体的出错原因 对同一个文件 每一次调用输入输出函数 均产生一个新的ferror函 数值 因此 应当在调用一个输入输出函数后立即检 查ferror函 数的值 否则信息会丢失 6262 文件的检测文件的检测 3 清除文件出错标志和文件结束标志 void clearerr FILE 清除出错标志和文件结束标志 使它们值为0 第四单元 案例学习 文件加密与解密 在实际工程应用中 经常会存在使用用户指定的算法对数 据进行加密的需求 本案例要求使用RC4对文件进行加密 在密码学领域 RC4是一种应用最广泛的流加密算法 应 用在安全套接字层 SSL 用来保护网络上传输的数据 和WEP 无线网络数据保护 上 其最大亮点是算法的 简单性和运行速度 第四单元 案例学习 文件加密与解密 RC4产生一个伪随机比特流 加密的时候 把它 跟明文进行二进制位异或处理 因为异或操作是 对称的 因此 解密时只需要再运行一次加密即 可 第四单元 案例学习 文件加密与解密 使用提供的RC4算法进行文件加密时 只需要提供需要加密的文件 加 密后的文件以及加密密码 直接调用加密算法的函数即可 int rc4encode FILE in FILE out char password 被加密的文件可能是文本文件或二进制文件 加密后的文件则为二进制 文件 因此程序中都应使用二进制方式打开 由于RC4算法是对称算法 解密时只需要再运行一次加密程序即可实现 逆向的解密 第四单元 案例学习 文件加密与解密 例10 9 使用命令行的方式输入加密和解密的文 件名 利用RC4算法实现对指定文件的加解密功 能 例10 9 本章小结本章小结 文件处理主要包括打开文件 读写文件和关闭文件等操作 两种打开文件的模式 二进制模式和文本模式 如果以二进制模式打开文 件 文件内容的读写是以字节方式来进行的 如果文件以文本模式打开 则会以字符文本的方式来进行读写 文件的顺序读写是从文件开始顺序进行的 如果需要随机读取文件任意位 置的内容 可以使用文件定位函数来移动和确定文件读写的位置 随机文 件读写一般是二进制文件内容的读写 本章重点掌握的内容是文件处理相关的各个函数的具体使用
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:C语言程序设计(文件)
链接地址:https://www.maidoc.com/p-16761814.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开