C语言读写文件大全 之 文件的创建、打开与关闭

来源:互联网 发布:网络广告语 红酒 编辑:程序博客网 时间:2024/05/18 18:53

        前面我们了解到标准I/O库函数的文件有两个处理方式:缓冲文件系统和非缓冲文件系统。由于标准的ANSI决定不采用非缓冲文件系统,而只采用缓冲文件系统,即既使用缓冲文件系统处理文本文件,也使用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件。

       缓冲系统自动地在内存区为每个正在使用的文件开辟一个缓冲区,文件的存取都是通过缓冲区进行的。缓冲区相当于一个中转站,它的大小由具体的C版本规定,一般为512字节。当从内存向磁盘输出数据时,先将数据送到内存缓冲区,待缓冲区装满后,再一起送到磁盘文件保存;当从磁盘文件读入数据时,则一次从磁盘文件中将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区。

     1、文件的创建与打开

     打开文件实际上是建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它各种操作。关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。关闭文件则是断开指针与文件之间的联系,也就禁止再对该文件进行操作。

        ANSIC规定了标准输入输出函数库,用fopen()函数来实现打开文件。该函数是指针型函数,调用后返回文件类指针。有两个函数参数,都是字符型指针。

        需要头文件:#include<stdio.h>

        函数的原型:FILE* fopen(char *filename,char*mode)

        函数参数:  filename,字符串形式表现的文件名,这个字符串可以是一个合法的带有路径的文件名;mode,对文件的操作模式,如下表所示。

表 1 文件操作模式

类型

含义

文件不存在时

文件存在时

r

以只读方式打开一个文本文件

返回错误标志

打开文件

w

以只写方式打开一个文本文件

建立新文件

打开文件,原内容清空

a

以追加方式打开一个文本文件

建立新文件

打开文件,只能从文件尾向文件追加数据

r+

以读/写方式打开一个文本文件

返回错误标志

打开文件

w+

以读/写方式建立一个新的文本文件

建立新文件

打开文件,原文件内容清空

a+

以读/写方式打开一个文本文件

建立新文件

打开文件,可从文件中读取或往文件中写入数据

rb

以只读方式打开一个二进制文件

返回错误标志

打开文件

wb

以只写方式打开一个二进制文件

建立新文件

打开文件,原文件内容清空

ab

以追加方式打开一个二进制文件

建立新文件

打开文件,从文件尾向文件追加数据

rb+

以读/写方式打开一个二进制文件

返回错误标志

打开文件

wb+

以读/写方式打开一个新的二进制文件

建立新文件

打开文件,原文件内容清空

ab+

以读/写方式打开一个二进制文件

建立新文件

打开文件,可从文件读取或往文件中写入数据

    函数返回值:调用成功则返回指向被打开文件的文件指针。否则,返回NULL。通常我们通过函数的返回值来判断函数调用是否成功。

例:文件的打开    

#include <stdio.h>#include <stdlib.h>main(){    FIEL*   pFile ;    if(pFile = fopen("file.c", "r") == NULL)   {        printf("File open failed… \n");        exit(0);   }    else   {        printf("File open successful… \n");        fclose(pFile);   }}

       对于文件使用方式有以下几点需要说明的:
      (1) 文件使用方式由r、w、a、t、b、+六个字符拼成,各字符的含义是 :r(read)读   w(write)写a(append)-追加t(text)-文本文件,可省略不写b(binary)-二进制文件+读和写
      (2) 用“r”打开一个文件时,该文件必须已经存在,且只能从该文件中读出。
      (3) 用“w”打开的文件只能向该文件写入。若打开的文件已经存在,则将该文件删除,重建一同名新文件;若打开的文件不存在,则以指定的文件名建一新文件。
      (4) 以“a”方式打开的文件,主要用于向其尾部添加(写)数据。此时,该文件应存在,打开后,位置指针指向文件尾。如所指文件不存在,则创建一个新文件。
      (5) “r+”、“w+”、“a+”方式打开的文件,既可以读入数据,也可以输出数据。“r+”方式时,文件应存在。“w+”方式是新建文件(同“w”方式),操作时,应先向其输出数据,有了数据后,也可读入数据。而“a+”方式,不同于“w+”方式,其所指文件内容不被删除,指针至文件尾,可以添加,也可以读入数据。若文件不存在,也可用其新建一文件。
      (6) 打开文件操作不能正常执行时,函数fopen()返回空指针NULL(其值为0),表示出错。出错原因大致为:以“r”、“r+”方式打开一个并不存在的文件、磁盘故障、磁盘满、无法建立新文件等。
      (7) 如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL (其值在头文件stdio.h中被定义为0)。
      (8) “r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。
      (9) 使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。
      (10) 有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。
      (11) 在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:
           ① 标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。
           ② 标准输出文件——stdout:指向终端输出(一般为显示器)。
           ③ 标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。

     2、文件的关闭

      调用该函数后的功能是断开由fopen()函数建立的文件指针fp与其相应文件的联系,释放它所占的内存缓冲区和相应的文件类型结构体变量所占的内存,使得原来的指针变量不再指向该文件。此后就不可以通过该指针来访问这个文件。     

       需要头文件:#include<stdio.h>

       函数的原型:int fclose(FILE * pFile)

      函数的参数: pFile指向文件的文件指针。调用这个函数使文件指针变量与文件“脱钩”,释放文件结构体和文件指针。从而释放内存空间。

      函数返回值:函数调用成功,关闭文件并返回0。否则(如磁盘空间不足、写保护或关闭已经关闭的文件)返回EOF,即-1。

#include<stdio.h>#include <stdlib.h>#define  NULL 0FILE*  fp;  if(( fp = fopen("文件名","文件使用方式")) == NULL)  {    printf("file can not open!\n");     exit(0);}┇                           fclose(fp); 

阿科

2012年9月26日于北京邮电大学学八楼629


原创粉丝点击