C语言文件操作 (一)
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关闭它相当于操作空指针或野指针,后果严重。