C语言文件操作 (一)

来源:C语言文件操作 (freecplus.net)

C 语言对文件进行操作之前必须先“打开”文件,操作(读和写)完成后,再“关闭”文件。

打开文件 --> 操作文件(文件读写)--> 关闭文件

1、文件操作

操作文件的时候,C语言为文件分配一个信息区,该信息区包含文件描述信息,缓冲区位置、缓冲区大小、文件读写到的位置等基本信息,这些信息用一个结构体来存放(struct_IO_FILE),这个结构体有一个别名FILE(typedef struct_IO_FILE FILE), FILE结构体和对文件操作的库函数在stdio.h头文件中声明。

typedef struct
{
    short level;            // 缓冲区“满”或“空”的程度
    unsigned flags;         // 文件状态标志
    char fd;                // 文件描述符
    unsigned char hold;     // 如缓冲区无内容不读取字符
    short bsize;            // 缓冲区的大小
    unsigned char *buffer;  // 数据缓冲区的位置
    unsigned ar *curp;      // 指针当前的指向
    unsigned istemp;        // 临时文件指示器
    short token;            // 用于有效性检查
}FILE;

1.1 打开文件的函数

fopen函数中会动态分配一个FILE结构体大小的内存空间,并把FILE结构体内存的地址作为函数的返回值,程序中用FILE结构体指针存放这个地址。

fopen来创建一个新的文件或者打开一个已存的文件,调用fopen函数成功后,返回一个文件指针( FILE *),函数的原型如下:

FILE *fopen( const char * filename, const char * mode );

参数filename 是字符串,表示需要打开的文件名,可以包含目录名,如果不包含路径就表示程序运行的当前目录。实际开发中,采用文件的全路径。

参数mode也是字符串,表示打开文件的方式(模式)。

返回值:打开成功,返回该文件对应的 FILE 类型的指针;打开失败,返回 NULL。故需定义 FILE 类型的指针变量,保存该函数的返回值。可根据该函数的返回值判断文件打开是否成功。

方式

含 义

说 明

r

只读

文件必须存在,否则打开失败。

w

只写

如果文件存在,则清除原文件内容;如果文件不存在,则新建文件。

a

追加只写

如果文件存在,则打开文件,如果文件不存在,则新建文件。

r+

读写

文件必须存在。在只读 r 的基础上加 '+' 表示增加可写的功能。

w+

读写

在只写w的方式上增加可读的功能。

a+

读写

在追加只写a的方式上增加可读的功能。

 

 

1.2 关闭文件的函数

fclose函数除了关闭文件,还会释放FILE结构体占用的内存空间。

函数的原型:

int fclose(FILE *fp);

fp为fopen函数返回的文件指针。

/*
 * 程序名:12-02.c,此程序用于文件打开和关闭简单操作 
*/
#include <stdio.h>
int main(){
	FILE *fp = 0; //定义存放文件指针的变量 
	fp = fopen("D:\\学习\\111.txt", "r"); 
	if ( fp == 0 )
	{
		printf("打开D:\学习\111.txt失败;\n");
		return -1;
	}
	printf("D:\学习\111.txt fp =%p \n", fp);//%p是打印地址的,打印文件的地址
	fclose(fp) ;
}

 

在windows 里面写路径时候用用两个反斜杠"//"或者正斜杠“/”来表示路径,主要不能使用一个反斜杠"\"

windows是两个反斜杠“\\”,也可以使用正斜杠“/”

linux 用正斜杠“/”

注意事情:

1)调用fopen打开文件的时候,一定要判断返回值,如果文件不存在、或没有权限、或磁盘空间满了,都有可能造成打开文件失败。

2)文件指针是调用fopen的时候,系统动态分配了内存空间,函数返回或程序退出之前,必须用fclose关闭文件指针,释放内存,否则后果严重。

3)如果文件指针是空指针或野指针,用fclose关闭它相当于操作空指针或野指针,后果严重。

posted @ 2020-12-02 23:28  石头,等待  阅读(253)  评论(0编辑  收藏  举报