计算机考研复试之C语言(第十章)

10.1 文件的有关基本知识

  • 1、文件
    • (1)概述
      “文件”一般指存储在外部介质上数据的集合,一批数据是以文件的形式存放在外部介质(如磁盘)上的。
    • (2)分类
      按存储内容分类有:
      ①程序文件
      这种文件的内容是程序代码,包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。
      ②数据文件
      文件的内容不是程序,而是供程序运行时读写的数据。
    • (3)数据流与流式文件
      输入输出是数据传送的过程,常将输入输出形象地称为流(stream),即数据流,通常为字符流或字节(内容为二进制数据)流。
      流式文件的存取是以字符(字节)为单位的,其输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。
  • 2、文件名
    一个文件要有一个唯一的文件标识,以便用户识别和引用,一般称为文件名。文件标识包括3部分:文件路径、文件主干名、文件后缀,如下图所示file1.dat文件存放在D盘中的CC目录下的temp子目录下面。
    在这里插入图片描述
  • 3、文件的分类
    • (1)文件分类
      根据数据的组织形式,数据文件可分为ASCII文件和二进制文件。
      ①二进制文件
      数据在内存中是以二进制形式存储的,可以认为它是存储在内存的数据的映像,所以也称之为映像文件(image file)。
      ②ASCII文件
      如果要求在外存上以ASCII代码形式存储,则需要在存储前进行转换。ASCII文件又称文本文件(text file),每一个字节放一个字符的ASCII代码。
    • (2)数据存储
      根据以上两种文件的分类,整数10000的存储方式如下图所示。
      在这里插入图片描述
  • 4、文件缓冲区
    缓冲文件系统如下图所示,只有文件缓冲区满后再一起进行输入输出。
    在这里插入图片描述
  • 5、文件类型指针
    • (1)概述
      文件使用时,文件相关信息会保存在系统声明的结构体变量中,类型用FILE表示,文件类型指针即指向该结构体类型的指针。
    • (2)定义文件指针
      FILE *f;
      定义fp是一个指向FILE类型数据的指针变量,可以使fp指向某一个文件的文件信息区,通过该文件信息区中的信息能够访问该文件。如果有n个文件,应设n个指针变量,分别指向n个FILE类型变量,以实现对n个文件的访问。

10.2 打开与关闭文件

  • 1、用fopen函数打开数据文件
    • (1)概述
      fopen函数的调用方式为:
      fopen(文件名,使用文件方式);
      其中包含三个信息:
      ①需要打开文件的名字;
      ②使用文件的方式(“读”还是“写”等);
      ③函数返回值给哪一个指针变量指向被打开的文件。
    • (2)使用文件方式
      使用文件方式,如下表所示。
      在这里插入图片描述
  • 2、用fclose函数关闭数据文件
    • (1)概述
      在使用完一个文件后应该关闭它,“关闭”是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件。其调用形式为:
      fclose(文件指针);
      fclose函数也带回一个值,当成功地执行了关闭操作,则返回值为0;否则返回EOF(-1)。
    • (2)工作原理
      在程序结束前应先关闭文件,这样就先把缓冲区中的数据输出到磁盘文件,然后撤销文件信息区,从而防止数据丢失的可能。

10.3 顺序读写数据文件

  • 1、向文件读写字符
    对文本文件读入或输出一个字符的函数,如下表所示。
    在这里插入图片描述
  • 2、向文件读写一个字符串
    读写一个字符串的函数,如下表所示。
    在这里插入图片描述
  • 3、用格式化的方式读写文件
    格式化输入输出调用方式为:
    fprintf(文件指针,格式字符串,输出表列);
    fscanf(文件指针,格式字符串,输入表列);
    其特点是由于需要在二进制内存变量与ASCII码文件之间频繁转换,因此使用fprintf和fscanf函数会花费较多时间。
  • 4、用二进制方式向文件读写一组数据
    • (1)概述
      C语言允许用fread函数从文件中读一个数据块,用fwrite函数向文件写一个数据块,在读写时都是以二进制形式进行的。
    • (2)调用形式
      它们的一般调用形式为:
      fread(buffer,size,count,fp);
      fwrite(buffer,size,count,fp);
      其各参数为:
      ①buffer,是一个地址。对fread来说,它是用来存放从文件读入数据的存储区地址。对fwrite来说,是要把此地址开始的存储区数据向文件输出(以上指的是起始地址)。
      ②size,数据项的字节数。
      ③count,要读写多个数据项(每个数据项长度为size)。
      ④fp,FILE类型指针。

10.4 随机读写数据文件

  • 1、文件位置标记及其定位
    • (1)文件位置标记
      为了对读写进行控制,系统为每个文件设置了一个文件读写位置标记(简称文件位置标记或文件标记),用来指示“接下来要读写的下一个字符的位置”。
      随机读写是指读写完上一个字符(字节)后,并不一定要读写其后续的字符(字节),而可以读写文件中任意位置上所需要的字符(字节)。
    • (2)文件位置标记的定位
      ①用rewind函数使文件位置标记指向文件开头,其形式为:
      rewind(文件类型指针);
      该函数无返回值。
      ②用fseek函数改变文件位置标记
      fseek(文件类型指针,位移量,起始点);
      其中参数为:
      a.“起始点”用0、1或2代替,0代表“文件开始位置”,1为“当前位置”,2为“文件末尾位置”;
      b.“位移量”指以“起始点”为基点,向前移动的字节数,位移量应是long型数据。
      ③用ftell函数测定文件位置标记的当前位置,其形式为:
      ftell(文件类型指针);
      其返回值为相对于文件开头的位置量、若出错,则返回-1L
  • 2、随机读写
    通过rewind和fseek函数,再调用顺序读写数据相关函数,就可以实现随机读写。

10.5 文件读写的出错检测

在调用各种输入输出函数时,因为返回值EOF不仅能够表示文件结束,同时能够表示输入输出操作中读、写出错及其他一些关联操作的错误状态,因此仅凭EOF并不能判断文件读写是否出错。

  • 1、ferror函数
    ferror(fp);
    如果ferror返回值为0(假),表示未出错;如果返回一个非零值,表示出错。
    对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢失。
  • 2、clearerr函数
    clearerr(fp);
    clearerr的作用是使文件错误标志和文件结束标志置为0,假设在调用一个输入输出函数时出现错误,ferror函数值为一个非0值,以便再进行下一次的检测。
原创文章 60 获赞 56 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40605573/article/details/106009165