程序员之程序设计知识点八

来源:软件水平考试    发布时间:2012-11-05    软件水平考试视频    评论

  8.1 C文件概述
  1.文件引用规则
  为使计算机程序能处理大量的数据信息,常将数据存储在计算机外部存储介质中,如磁带、磁盘等。计算机操作系统将存储在外部存储介质中的数据以数据流的形式来组织。每个独立的数据流称作文件,每个文件有一个名字。为便于管理文件,操作系统维持一个呈层次状的目录结构,每个文件都被登录在某一目录下。习惯也将从键盘输入的数据流和向显示屏或打印机输出的数据流称作文件。引用文件可由以下几部分组成:
  盘符:路径/文件名.扩展名
  其中盘符表示文件所在存储块,系统将外部存储介质分成多个存储块,并用不同的盘符标识这些块。路径是文件所在目录层次,文件名和扩展名通常是由字母开头、字母和数字符组成。扩展名可以多至3个字符,通常用来表示文件的属性。因操作系统保留着当前盘和当前路径,若要引用当前盘或当前路径下的文件,盘符和路径可以省略。
  2.文件的打开和关闭
  由于文件存放在磁盘上,程序要处理文件上的数据,必须先将文件中的数据读人到内存;反之,程序要将产生的数据永久保存,就应将数据写到文件中。文件受操作系统管理,程序要使用文件,就要请求操作系统,让程序与某文件之间建立某种联系,习惯称程序与文件建立联系的过程为文件打开;反之,撤消程序与文件联系的过程为文件关闭。所以,程序要使用文件,先要打开文件;程序使用文件结束后,应及时关闭文件。
  3.文件缓冲技术
  在现代计算机系统中,程序读文件中的数据或写数据到文件,都在操作系统控制下完成。若程序要从文件读人一个数据,操作系统会一次性地读入一大块数据暂存于内存中,供程序已后再读入时使用。程序向文件写数据时,也不是立即将数据写到文件中,而是暂时存于某个内存块中,待内存块写满,或程序明确告知写文件结束后,再将数据写到文件中。这种文件数据读写技术称为缓冲。文件读写采用缓冲技术的系统称为缓冲文件系统。在缓冲文件系统中,暂存输入输出数据的内存块称为文件缓冲区。不采用缓冲技术,操作系统直接按程序要求完成输入输出的系统称为非缓冲系统。操作系统为了控制和完成文件读写操作,为每个正与程序相联系的文件设有一个控制块,在控制块中记录文件的名称、文件的属性、文件当前读写位置、文件缓冲区开始地址、文件当前读写位置所对应缓冲区的位置等等。文件缓冲区和文件控制块都由系统分配和受系统控制。
  4.二进制文件和文本文件
  文件按其数据信息的存放格式分类,文件可分二进制文件和文本文件两种。二进制文件中的数据是按二进制方式存放,即以数据在计算机内存的存放格式将数据存储在文件中。将数据转换成字符列,每个字符又以字符的代码(例如,ASCII代码)存储的文件称为文本文件。一般来说,二进制文件比文本文件更紧凑,并在数据传输时不必进行格式转换,常用于计算机与计算机之间、计算机与外部设备之间传输数据用。由于文本文件以字符的代码存储,输出内容能让人直接阅读,常用于人与计算机之间通信时使用。
  5.顺序文件和随机文件
  文件按读写方式分,可以把文件分为顺序文件和随机文件。顺序文件要求文件读写从文件头开始,读或写操作顺序进行。若临时要读取文件中间的某个数据,必须从头开始读,直至读人要读的数据;若在文件某位置要写入新的数据,也必须从文件的第一个数据开始顺序读取和复写,并在要改写的数据写入后,还要继续读取和复写其后的全部数据。随机文件允许随机地读取或改写文件任一位置上的数据。
  C语言本身未提供有关文件操作的输入输出语句,但对文件的打开、关闭和读写操作都可用系统提供的库函数来实现。程序可用它们对文件作各种复杂的处理。
  6.设备文件
  系统将常规设备上的输入输出数据流称为标准文件,程序运行前,系统自动打开这些标准文件。它们是标准输入文件、标准输出文件、标准出错输出文件和标准打印输出文件。系统自动定义了这些标准文件的文件指针,它们依次是stdin、stdout、stderr和stdprn,供程序直接使用。
  程序除能直接使用前面各章都使用的不带文件指针的标准输入输出库函数外,也可对它们使用下面介绍的带文件指针的一般形式的输入输出库函数。如stdin,就是指从终端输入数据;stdout,就是向终端输出数据。
  7.文件类型和文件类型指针变量
  为了正确地完成文件读写,操作系统为每个正被程序使用的文件在内存中开辟一个存储区,用于存放有关对文件进行操作所需的控制信息(简称控制块)。如文件名、文件读写状态。文件缓冲区大小和位置、当前读写位置等。控制块是一个结构变量,其类型由系统预定义,取名为FILE,习惯称文件类型。程序通过指向该控制块的指针调用系统提供的文件处理库函数。
  程序在使用文件前,先调用文件打开函数。打开函数为将要使用的文件指定一个FILE类型的结构变量,并返回该结构的指针。系统通过指向该结构的指针来引用结构中的文件控制信息,实现正确读写对应的文件。
  程序要使用文件,就要定义FILE类型的指针变量(称文件指针变量)。例如:
  FILE * fp;
  定义如是一个文件指针变量,它能指向前述类型为FILE的文件控制块结构变量。
  8.文件打开库函数 fopen()
  在读写文件之前,先得打开文件。打开文件可使用库函数fopen() 。调用函数fopen() 的一般形式为
  fopen(文件名,使用方式)
  其中文件名(可能还包括盘符和目录路径) 为字符串表达式。使用方式也是一个字符串,用来指明文件的读写方式。函数fopen() 将返回文件控制块结构变量指针,程序应将调用函数fopen(),返回的指针值赋给某个文件指针变量来保存。如语句
  fp = fopen(“//usr4//smp.dat”,“r”);
  以文件读方式打开根目录下的usr4子目录中的smp.dat文件。
  调用函数fopen()时,可能会因某种原因不能打开文件。如读方式下打开一个不存在的文件;在写方式下,外部存储介质已无剩余的自由空间,或外设故障,或超过系统能同时打开的文件数;等等。文件不能打开时,函数fopen()将返回一个空指针值NULL。程序应考虑到文件不能正常打开的极端情况,所以常用以下形式的C代码描述打开一个文件的要求:
  if((fp =fopen( filename,“r”))==NULL) {
  printf(“Can not open %s file./n”, filename);
  exit(0); /* 结束程序的执行,回到环境或操作系统 */
  }
  以上代码以读方式打开一个文件,其中filename是某文件名字符串表达式。上述代码在调用函数fopen()后立即检查打开是否成功,如果打开不成功,就在终端上输出该文件不能打开字样,调用exit函数。exit函数是系统提供的函数,该函数的执行将释放程序的全部资源,终止程序的执行。调用该函数时需指定一个整数,该整数将作为程序终止时给系统的一个返回值。若程序使用该函数,应在程序的头写上包含stdio.h头文件的预处理命令。
  关于函数fopen()的使用方式参数,说明以下几点:
  (1)用“r”方式打开的文件只能用于从文件输入数据,不能用于输出;而且要求该文件已经存在,否则函数fopen() 返回NULL值。
  (2)用“w”方式打开的文件只能用于向文件输出数据,不能用于输入。如打开时,原文件不存在,则新建立一个以指定名字命名的文件;如原文件已存在,则原文件上的数据被全部删除。
  (3)如希望打开文件用于写,又不要删除原文件中的数据,并从原文件的末尾开始添加新的数据,应该用“a”方式打开。
  (4)用“r+”、“w+”、“a+” 方式打开的文件可以输入数据,也可以输出数据。用“r+”方式只允许打开已存在的文件,以便程序能输入数据;用“w+”方式打开,则新建立一个文件,先是向文件输出数据,然后可以从该文件读人数据;用“a+”方式打开一个已存在的文件,位置指针先移到文件的末尾,准备添加数据,以后也可以输入数据。
  (5)要打开二进制文件,只要在对应正文文件打开方式中接上字符b即可,如“rb”表示以输入方式打开二进制文件。
  正文文件与二进制文件在使用时,还有一点不同。对于正文文件,输入时,回车符和换行符合成为一个换行符输入;输出时,换行符('/n')转换成为回车符和换行符两个字符一起输出。对于二进制文件,不进行上述这种转换。
  9.文件关闭库函数fclose()
  在使用完一个文件后,程序应该立即关闭它,以防止后继执行的程序语句错误或人为的误操作破坏正打开着的文件。关闭文件可调用库函数fclose()来实现。调用函数fclose()的一般形式为
  fclose(文件指针);
  例如:
  fclose(fp);
  调用函数fclose()的作用是使文件指针变量终止原先调用函数fopen()时所建立的它与文件的联系。调用函数fclose()之后,不能再通过该文件指针变量对其原先相连的文件进行读写操作,除非被再次打开。文件被关闭后,原文件指针变量又可用来打开文件,或与别的文件相联系,或重新与原先文件建立新的联系。

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答