您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 文件-安徽电子信息职业技术学院网站首页
第9章文件文件是存储在外部介质上数据的集合,是程序设计中一个重要的概念。操作系统以文件为单位对数据进行管理。C语言文件的输入和输出由库函数来完成。1、流和文件C语言I/O系统在编程者和使用设备之间提供了一层抽象的东西。这个抽象的东西就叫做“流”。具体的实际设备叫做“文件”C语言把文件看作是一个字符的序列,即由一个个字符的数据流组成,一个文件是一个字符流。在C语言中对文件的存取是以字符为单位的,这种文件称为流式文件。C语言提供了两种类型的流:文本流和二进制流。•一个文本流是一行行的字符,换行符表示这一行的结束。在一个文件流中某些字符的变换由环境工具的需要来决定。•一个二进制流是由与外围设备中的内容一一对应的系列字节组成的。使用中没有字符翻译过程,而且所读写的字节数目也与外设中的数目相同。用一个打开操作使流和一个特定的文件建立联系。一旦一个文件被打开,程序就可以与该文件交换信息。关闭操作使文件脱离一个特定的流。对于一个打开的输出流,关闭时则将与这个流有关的缓冲区的内容写入到外围设备上。每一个与文件相结合的流都有一个FILE型文件控制结构,这个结构在头文件stdio.h中有定义。2、标准设备文件在一个程序开始执行时,三个预定义的文本流stdin,stdout和stderr就被打开。它们是与系统相连接的标准输入输出设备。其中:stdin指标准输入设备,即键盘;stdout指标准输出设备,即终端显示器;stderr是标准出错输出设备,一般是终端显示器。9.1文件类型指针文件结构指针是一个指向文件有关信息的指针。这些信息定义了文件的文件名、状态和当前位置。在概念上文件结构指针标志着一个指定的磁盘文件。文件结构指针是一个FILE型指针变量,在头文件stdio.h中已定义如下:typedefstruct{shortlevel;unsignedflags;charfd;unsignedcharhold;shortbsize;unsignedchar*buffer;unsignedchar*curp;unsignedistemp;shorttoken;}FILE;例如定义一个文件型指针变量:FILE*fp;说明:fp就是一个指向FILE类型结构的指针变量,通过该文件指针变量就可以找到它相关联的文件,从而对文件进行读写操作。9.2文件的打开与关闭C语言规定对文件进行读写操作之前应该首先打开该文件,在操作结束之后应关闭该文件。1.文件的打开fopen()函数fopen()函数打开一个流并把一个文件与这个流连接,fopen()函数的调用方式为:FILE*fp;fp=fopen(filename,mode);其中:filename必须是一个字符串组成的有效文件名;mode是说明文件打开方式的字符串,在TurboC中,有效的mode值如下表所示;fopen()函数如果成功地打开所指定的文件,则返回指向新打开文件的指针,且假想的文件位置指针指向文件首部;如果未能打开文件,则返回一个空指针。文件操作方式含义指定文件不存在时指定文件存在时“r”只读打开一个文本文件只读出错正常打开“w”只写生成一个文本文件只写建立新文件原文件内容丢失“a”追加对一个文本文件添加建立新文件原文件尾部追加数据“rb”打开一个二进制文件只读出错正常打开“wb”生成一个二进制文件只写建立新文件原文件内容丢失“ab”对一个二进制文件添加建立新文件原文件尾部追加数据“r+”打开一个文本文件读/写出错正常打开“w+”生成一个文本文件读/写建立新文件原文件内容丢失“a+”打开或生成一个文本文件读/写建立新文件原文件尾部追加数据“rb+”打开一个二进制文件读/写出错正常打开“wb+”生成一个二进制文件读/写建立新文件原文件内容丢失ab+”打开或生成一个二进制文件读/写建立新文件原文件尾部追加数据【例1】打开一个名为test.txt文件并准备写操作。fp=fopen(“test.txt”,“w”);if((fp=fopen(“test”,“w”))==NULL){puts(“不能打开此文件\n”);exit(1);}注意:NULL是stdio.h中定义的一个宏说明:在打开一个文件作为读操作时,该文件必须存在;如果文件不存在,则返回一个出错信息。以读操作“r”或“rb”方式打开一个文件,只能对该文件进行读出而不能对该文件进行写入。用“w”或“wb”打开一个文件准备写操作时,如果该文件存在的话,则文件中原有的内容将被全部抹掉,并开始存放新内容;如果文件不存在,则建立这个文件。以写操作“w”或“wb”方式打开一个文件,只能对该文件进行写入而不能对该文件进行读出。在“a”、“ab”、“a+”、“ab+”方式打开一个文件,要在文件的尾部再加写些内容,则在打开文件时,如果该文件存在,则文件中原有的内容不会被抹掉,文件位置指针指向文件末尾;如果该文件不存在,就建立这个文件。以“r+”或“rb+”方式打开一个文件进行读写操作时,该文件必须存在,如果文件不存在,则返回一个出错信息。以“w+”或“wb+”方式打开一个文件进行读写操作时,如果该文件存在,则文件中原有的内容将被抹掉;如果该文件不存在,就建立这个文件。2.fclose()函数fclose()函数用来关闭一个已由fopen()函数打开的流,fclose()函数的调用形式为:fclose(fp);其中:fp是一个调用fopen()时返回的文件指针。若关闭文件成功,则fclose()函数返回值为0;若fclose()函数的返回值不为0,则说明出错。。9.3文件的读写操作1.fputc()、fgetc()和feof()函数fputc()函数的调用形式为:fputc(ch,fp);功能:用来向一个已由fopen()函数打开的写操作流中写一个字符。若fputc()操作成功,则返回值是输出的字符;若操作失败,则返回EOF(文件结束)。fgetc()函数的调用形式为:fgetc(fp);功能:fgetc()函数用来从一个已由fopen()函数打开的读操作流中读取一个字符。fgetc()返回文件指针所指文件中当前位置上字符。当读到文件尾时,fgetc()返回一个EOF文件结束标记。feof()函数feof()函数的调用形式为:feof(fp);feof()函数将返回一个整型值,在到达文件结束点时其值为1,未达到文件结束点时其值为0。2.getw()函数和putw()函数getw()函数和putw()函数用于从磁盘文件中读或写一个整型数据(一个字)。3.fgets()函数和fputs()函数fgets()函数和fputs()函数用来读写字符串的。调用形式为:fgets(str,length,fp);和fputs(str,fp);4.fread()函数和fwrite()函数调用形式为:fread(buffer,num_bytes,count,fp);fwrite(buffer,num_bytes,count,fp);其中:buffer是一个指针;读写的字节数用num_bytes来表示;参数count指示共有多少个字段要被读写;fp是一个有效的文件指针。5.fprintf()函数和fscanf()函数调用方式为:fprintf(fp,“控制字符串”,参数表);fscanf(fp,“控制字符串”,参数表);其中:fp是一个有效的文件指针,控制字符串和参数表同printf()和scanf()函数。fprintf()函数操作成功,返回实际被写的字符个数;不成功返回一个负数。fscanf()函数操作成功,返回实际被赋值的参数个数;若返回EOF,则表示试图去读取超过文件末尾的部分。9.4文件定位与出错检测1、文件定位fseek()函数调用形式为:fseek(fp,num_bytes,origin);功能:fseek()函数可以完成随机读写操作,可以随机设置文件位置指针。fseek()函数操作成功,返回0,返回非零值表示失败。其中,origin是下表中所示的几个宏名之一:宏名字数值表示origin(起点)SEEK_SET0文件开始为起点SEEK_CUR1文件当前位置为起点SEEK_END2文件末尾为起点2、出错检测ferror()函数ferror()函数用来确定文件操作中是否出错。调用形式为:ferror(fp);其中:fp是一个调用fopen()时返回的文件指针。若在文件操作中发生了错误,则ferror()函数返回一个非零值,即“真”;否则返回值为0,即“假”。9.5其他文件函数1、rewind()函数rewind()函数用来将文件位置指针重新设置到该文件首。其调用形式是:rewine(fp);2、ftell()函数ftell()函数的作用是得到流式文件中位置指针的当前位置,用相对于文件开头的位移量来表示。3、clearerr()函数clearer()函数的作用是使文件错误标志和文件结束标志置为0。其调用形式是:clearerr(fp);4、remove()函数remove()函数删除所指定的文件,其调用形式为:remove(filename);字符串filename是指定要删除的文件名。该函数正确执行完毕返回0,否则返回非零值。其调用形式是:ftell(fp);其中fp是一个有效的文件指针,其定义如前所述。本章小结文件是程序设计中一种重要的数据类型,是存储在外部介质上的一组数据集合。C语言中文件根据数据组织形式有二进制文件和文本文件。对文件操作分为三步:打开文件、读写文件、关闭文件。文件的读写操作可以使用库函数fscanf()与fprintf()函数、fgetc()与fputc()函数、fgets()与fputs()函数、fread()与fwrite()函数,这些函数最好配对使用,以免引起输入输出的混乱。
本文标题:文件-安徽电子信息职业技术学院网站首页
链接地址:https://www.777doc.com/doc-47448 .html