一.文件指针
1.缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”;
2.每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等);3.这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。
下面是在 vs2013编译环境提供的 stdio.h 头文件中有以下的文件类型申明:
1. struct _iobuf 2. { 3. char *_ptr; 4. int _cnt; 5. char *_base; 6. int _flag; 7. int _file; 8. int _charbuf; 9. int _bufsiz; 10. char *_tmpfname; 11. }; 12. typedef struct _iobuf FILE;
不同的编译器结构体的内容可能有些不一样,但都大同小异;
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
下面创建一个文件指针变量:
1.定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量);
2.通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。
例如:
二.文件的打开和关闭
1.文件的打开
打开文件我们需要使用到 fopen 函数;
让我们看看 fopen 在库函数中的声明:
1.需要头文件<stdio.h>;
2.参数const char *filename: 要打开的文件的文件名 ;
3.参数const char *mode :表示要打开的模式;
4.返回值:返回一个文件指针,若文件打开失败则返回一个空指针;
注意(文件扩展名):
有些小伙伴们打开文件的时候,认为自己的文件名是正确的,但编译器却显示没有这个文件,这个时候不要质疑电脑,电脑是不会出错的,遇到这种情况我们应检查文件管理器的文件扩展名是否开启,如果没有打开那打开就行了,你会发现有些文件名称发生了变化;
详情如图:
文件打开模式:
2.文件的关闭
关闭文件需要使用到函数 fclose ;
下面来看看 fclose 在库函数中的声明:
1.参数 FILE *stream : 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流;
2.返回值:若文件关闭成功,则返回0;
若文件关闭失败,则返回EOF;
实例:
1. int main() 2. { 3. FILE* pf = fopen("test.txt", "w"); //以只写的方式打开文件 4. if (pf == NULL) //判断文件是否打开成功 5. { 6. perror("fopen"); //若打开失败,则显示错误信息 7. return 0; 8. } 9. //写文件 10. //....... 11. //关闭文件 12. fclose(pf); 13. pf = NULL; //将文件指针置空,防止野指针的使用 14. return 0; 15. }
三.文件的读写
1.读与写,输出与输入的概念