C语言文件的打开与关闭

举报
念君思宁 发表于 2023/02/10 20:01:14 2023/02/10
【摘要】 C语言文件的打开与关闭

对于文件的打开与关闭,我们可以通过鼠标来控制!!但是,在我们写代码的时候,总不能来用鼠标来打开关闭文件,并且还能将代码放在那个文件里面吧!因此,我们需要一个文件指针来帮助我们来打开和关闭文件!!

1.文件指针

缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE.

上述的大致意思就是: 一旦打开文件,在内存中就会开辟一块空间,里面记录相关的信息(如,文件的名字 ;文件的状态,……)而这一块区域,我们叫做:文件信息区!!

vs2013中,编译环境提供的stdio.h 头文件中有以下的文件的声明:

​
 
struct _iobuf {
    char* _ptr;
    int   _cnt;
    char* _base;
    int   _flag;
    int   _file;
    int   _charbuf;
    int   _bufsiz;
    char* _tmpfname;
};
typedef struct _iobuf FILE;
 

在上述的代码中,是一个文件指针:typedef struct _iobuf FILE;并且重命名为:FILE   因此,我们就能直接使用FILE这个指针了!!

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息, 使用者不必关心细节

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

下面我们可以创建一个FILE*的指针变量:

FLIE* pf ;  //文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。也就是说通过文件指针变量能够找到与它关联 的文件

 上面我们简单的介绍了一下FILE的由来与使用,下面笔者将进入:文件的打开与关闭的方式上:

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件

在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指 针和文件的关系。

ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream );

在打开文件的操作过程中:

const char * filename  :是指文件名!!

const char * mode   : 这个是指:文件的打开方式!!

举列一下:

#include <stdio.h>
 
 
int main()
{
	FILE* pf = fopen("tset.txt", "w");
 
}

经过上面的代码的运行,我们就可以清晰的看到:

因此,这样就是成功的创建并打开了这个文件!!

 当文件成功打开的话,会返回一个地址,当文件打开失败的话,会返回一个NULL(空指针),所以,需要对返回值进行判断!!

下面请看一下笔者的完美打开关闭文件的简单代码:
 

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件!
	//具体内容不再写了!
 
 
 
	//关闭文件
	fclose(pf);
	pf = NULL;  //手动置空(NULL)
	return 0;
}

上述内容,则为正确的打开文件的操作!!要切记:一定要对指针进行是否为空指针的判断!!

下面简述几种文件的打开操作:

更多关于文件的精彩内容,请详见笔者后续更新!本文就先到此为止!!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。