C语言入门学习文件笔记.docx
《C语言入门学习文件笔记.docx》由会员分享,可在线阅读,更多相关《C语言入门学习文件笔记.docx(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、文件笔记C文件的有关基本知识L什么是文件文件有不同的类型,在程序设计中,主要用到两种文件:(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后 缀 为.exe)等。这种文件的内容是程序代码。(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程 中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。(本章主要讨论的是数据文件)为了简化用户对输入输出设备的操作操作系统把各种设备都统一作为文件来处理。从操作 系统的角度看,每一个与主机相连的输入输出设备都看作一个文件。例如,终端键盘是输入 文件,显示屏和打印机是输出文件。
2、所谓“文件”一般指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介 质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说如果想找存放在 外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向 外部介质上存储数据也必须先建立一个文件(以文件名作为标志),才能向它输出数据。输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地 称为流,即数据流。流表示了信息从源到目的端的流动。文件是由操作系统进行统一管理的,C语言把文件看作一个字符(或字节)的序列,即由一个一个字符(或字节)的数据顺序组 成。一个输入输出流就是一个字符
3、流或字节(内容为二进制数据)流。C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限.两行数据间不会自动加分 隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控 制而不受物理符号(如回车换行符)控制.这就增加了处理的灵活性。这种文件称为流式文 件。2 .文件名(文件标识)一个文件要有一个唯一的文件标识,以便用户识别和弓I用。文件标识包括3局部:(1)文件路径;(2)文件名主干;(3)文件后缀。文件路径表示文件在外部存储设备中的位置。如:D : CC temp filel. dat文件路径文件名主干 文件后缀表示filel.dat文件存放在D盘中的CC目录下的
4、temp子目录下面。文件名主干的命名规那么遵循标识符的命名规那么。后缀用来表示文件的性质,如:doc (Word 生成的文件),txt (文本文件),dat (数据文件).c (C语言源程序文件),cpp (C+源程 序文件),for (FORTRAN语言源程序文件),pas (Pascal语言源程序文件).obj (目标文 件),exe (可执行文件).ppt (电子幻灯文件),bmp (图形文件)等。3 .文件的分类根据数据的组织形式.数据文件可分为ASCII文件(文本文件)和二进制文件(映像文件)。数据 在内存中是以二进制形式存储的,如果不加转换地输出到外存,就是二进制文件,可以认为它2
5、.随机读写有了 rewind和fseek函数,就可以实现随机读写了。通过下面简单的例子可以了解怎样进 行随机读写。文件检测函数.文件结束检测函数feof函数调用格式:feof(文件指针);功能:判断文件是否处于文件结束位置,如文件结束,那么返回值为1,否那么为0o 为了知道对文件的读写是否完成,只须看文件读写位置是否移到文件的末尾。说明:在文件的所有有效字符后有一个文件尾标志。当读完全部字符后,文件读写位置标记 就指向最后一个字符的后面,即指向了文件尾标志。如果再执行读取操作,那么会读出-1(不要 理解为最后有一个结束字节,在其中存放了数值它只是一种处理方法)。文件尾标志用 标识符EOF(en
6、d of file)表示。EOF在stdio. h头文件中被定义为 例:ch= fgetc(in); 从输入文件读入一个字符,赋给变量chwhile( !feof(in) 如果未遇到输入文件的结束标志fpute(ch,out); 将ch写到输出文件putchar(ch); 将ch显示到屏幕上ch=fgetc(in); 再从输入文件读人一个字符,赋给变量ch putchar( unn );用feof函数可以检测文件尾标志是否已被读取过。如果文件尼标志已被读出,那么表示文件 已结束,此时束of函数值为真(以1表示),否那么他of函数值为假(以0表示)。不要把feof函 数值的真和假(0)与文件尾标
7、志的假设值(-1)相混淆。前者为函数值,后者为尾标志的假设 值。程序中的feof(in)用来判断in所指向的文件是否结束了。开始时显然没有读到文件尾标志, 故“feof(in)”为假,“ ! feof(in)”为真,所以要执行while循环体。直到读取完最后一个字符 并输出到磁盘文件和屏幕后,还再执行一次fgetc函数,即读取文件尾标志了。再返回while 语句检查循环条件,此时feof(in)为真了,因此“!feof(in)”为假,不再执行while循环体了。 while语句是可以改为while(ch! = -1)或 while(ch! =EOF)1 .文件读写的出错检测c提供一些函数用来检
8、查输入输出函数调用时可能出现的错误。L读写文件出错检测函数(ferror函数)在调用各种输入输出函数(如putc, getc,fread和(write等)时,如果出现错误,除了函数 返回值有所反映外,还可以用ferror函数检查。它的一般调用形式为terror (fp);如果ferror返回值为。(假),表示未出错;如果返回一个非零值,表示出错。应该注意,对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此, 应当在调用一个输入输出函数后立即检查ferror函数的值,否那么信息会丧失。在执行fopen函数时,ferror函数的初始值自动置为0。2.文件出错标志和文件结束
9、标志置0函数(clearerr函数)clearerr的作用是使文件出错标志和文件结束标志置为0。假设在调用一个输入输出函数时 出现错误,feiror函数值为一个非零值。应该立即调用clearerr ( fp),使ferror (fp)的值变 成0,以便再进行下一次的检测。只要出现文件读写出错标志,它就一直保存,直到对同一文件调用clearerr函数或rewind 函数,或任何其他一个输入输出函数。就是存储在内存的数据的映像,所以也称之为映像文件。如果要求在外存上以ASCII代码形 式存储,那么需要在存储前进行转换。ASCII文件又称文本文件(text file),每一个字节存放一 个字符的AS
10、CII代码。用二进制形式输出数值,可以节省外存空间和转换时间。4 .文件缓冲区ANSI C标准采用“缓冲文件系统”处理数据文件,所谓缓冲文件系统是指系统自动地在内 存区为程序中每一个正在使用的文件开辟一个文件缓冲区。从内存向磁盘输出数据必须先送 到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向计算机读入数据.那么一次 从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送 到程序数据区(给程序变量)。这样做是为了节省存取时间,提高效率,缓冲区的大小由各个 具体的C编译系统确定。说明:每一个文件在内存中只有一个缓冲区,在向文件输出数据时,它就作为输出缓冲区,
11、在 从文件输入数据时它就作为输入缓冲区。5 .文件类型指针(文件指针)每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文 件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中的。该结构 体类型是由系统声明的,取名为FILE。不同的C编译系统的FILE类型包含的内容不完全相同,但大同小异。对以上结构体中的成 员及其含义可不深究,只须知道其中存放文件的有关信息即可。FILE结构体类型的信息包含在头文件“stdio.h”中。在程序中可以直接用FILE类型名定义变 量。每一个FILE类型变量对应一个文件的信息区,在其中存放该文件的有关信息。例如,可以定义
12、以下FILE类型的变量:FILE fl ;以上定义了一个结构体变量fl,用它来存放一个文件的有关信息。这些信息是在翻开一个文 件时由系统根据文件的情况自动放入的,在读写文件时需要用到这些信息,也会修改某些 信息。例如在读一个字符后,文件信息区中的位置标记指针的指向就要改变。一般不通过FILE类型变量的名字来引用这些变量,而是设置一个指向FILE类型变量的指针 变量,然后通过它来引用这些FILE类型变量。下面定义一个指向文件型数据的指针变量:FILE* fp ;定义fp是一个指向FILE类型数据的指针变量。可以使fp指向某一个文件的文件信息区(是 一个结构体变量),通过该文件信息区中的信息就能够
13、访问该文件。也就是说通过文件指针 变量能够找到与它关联的文件。如果有n个文件,应设n个指针变量,分别指向n个FILE类 型变量,以实现对n个文件的访问。通常将这种指向文件信息区的指针变量简称为指向文件的指针变量,注意:指向文件的指针变量并不是指向外部介质上的数据文件的开头,而是指向内存中的文 件信息区的开头。翻开与关闭文件对文件读写之前应该“翻开”该文件,在使用结束之后应“关闭”该文件。所谓翻开”是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用 来暂时存放输入输出的数据)。在编写程序时,在翻开文件的同时,一般都指定一个指针变量指向该文件,也就是建立起指 针变量与文件之间的联
14、系,这样,就可以通过该指针变量对文件进行读写了。所谓“关闭” 是指撤销文件信息区和文件缓冲区,使文件指针变量不再指向该文件,显然就无法进行对文 件的读写了。1用fopen函数翻开数据文件ANSI C规定了用标准输入输出函数fopen来实现翻开文件。fopen函数的调用方式为fopen (文件名“,”使用文件方式”);例如:fopen (aln ,nrn );表示要翻开名字为al的文件,使用文件方式为“读入” (r代表read,即读入)。fopen函数的返回值是指向al文件的指针(即al文件信息区的起始地址)。通常将fopen函 数的返回值赋给一个指向文件的指针变量。如:FILE*fp ; 定义
15、一个指向文件的指针变量fpfp=fopen (al.M r);将fopen函数的返回值赋给指针变量fp在翻开一个文件时,通知编译系统以下3个信息:需要翻开文件的名字,也就是准备访问 的文件的名字;使用文件的方式(“读”还是“写”等);让哪一个指针变量指向被打 开的文件。使用文件方式如果指定的文件不存在如果指定的文件不存在文件使用方式 含义w (只写)a (追加) rb (只读) wb (只写) ab (追加)w (只写)a (追加) rb (只读) wb (只写) ab (追加)r (只读)为了输入数据,翻开一个已存在的文本文件出错建立新文件出错出错建立新文件出错为了输出数据翻开一个文本文件向
16、文本文件尾添加数据为了输入数据翻开一个二进制文件 为了输出数据,翻开一个二进制文件 向二进制文件尾添加数据“r+” (读写) 为了读和写,翻开一个文本文件出错“w+” (读写)为了读和写,建立一个新的文本文件建立新文件匕+” (读写)为了读和写,翻开一个文本文件出错“由+” (读写)为了读和写,翻开一个二进制文件出错“wb+” (读写)为了读和写,建立一个新的二进制文件建立新文件“ab+” (读写)为读写翻开一个二进制文件出错(1)用方式翻开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件 应该已经存在,并存有数据,这样程序才能从文件中读数据。不能用r方式翻开一个并不存 在的文
17、件,否那么出错。(2)用w方式翻开的文件只能用于向该文件写数据(即输出文件),而不能用来向计算机输入。 如果原来不存在该文件,那么在翻开文件前新建立一个以指定的名字命名的文件。如果原来 已存在一个以该文件名命名的文件.那么在翻开文件前先将该文件删去然后重新建立一个新 文件。(3)如果希望向文件末尾添加新的数据(不希望删除原有数据),那么应该用a方式翻开。但此 时应保证该文件已存在;否那么将得到出错信息。翻开文件时,文件读写位置标记移到文件末 尾。(4)用“r+” “w+”匕+”方式翻开的文件既可用来输入数据,也可用来输出数据。用 “r+”方式时该文件应该已经存在,以便计算机从中读数据。用“w
18、+ ”方式那么新建立一个 文件,先向此文件写数据,然后可以读此文件中的数据。用匕+ ”方式翻开的文件,原来 的文件不被删去,文件读写位置标记移到文件末尾,可以添加,也可以读。(5)如果不能实现“翻开”的任务,fopen函数将会带回一个出错信息。出错的原因可能是: 用r方式翻开一个并不存在的文件;磁盘出故障;磁盘已满无法建立新文件等。此时fopen 函数将带回一个空指针值NUU_(在stdio. h头文件中,NULL已被定义为0)。常用下面的方法翻开一个文件: if (fp= fopenCfiler/r) = = NULL) (printf(cannot open this filcn); ex
19、it(0);)即先检查翻开文件的操作有否出错,如果有错就在终端上输出cannot open this file。exit函 数的作用是关闭所有文件,终止正在执行的程序,待用户检查出错误,修改后重新运行。(7)在表10.1中,有12种文件使用方式,其中有6种是在第一个字母后面加了字母b的 (如rb,wb,ab,rb+,wb+,ab+),b表示二进制方式。其实,带b和不带b只有一个区别,即对换 行的处理。由于在C语言用一个大即可实现换行,而在Windows系统中为实现换行必须 要用“回车”和“换行”两个字符,即和,”因此,如果使用的是文本文件并且用w方 式翻开,在向文件输出时,遇到换行符时,系统就
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 入门 学习 文件 笔记
限制150内