您的当前位置:首页正文

75.【C语言】文件操作(2)

来源:九壹网

承接文章


5.详细阐释文件的打开和关闭

1.流

事实:程序的数据需要输出到各种外部设备,也需要从外部设备获取数据

为了方便程序员对各种设备进行方便的操作,引入一个概念:流,把流想象成流淌着字符的河

C语言对数据的输入和输出都是按照"流"来进行的

数据输出-->流(中转站)-->各种外设(显存,文件,网络......)

数据读取<--流(中转站)<--各种外设(显存,文件,网络......)

2.标准流

向屏幕输入数据:,putchar,printf;从键盘输入数据:getchar,scanf

这些函数的实现依赖"流"

C程序在启动时默认打开了3个标准

3.文件指针

FILE 两层含义

FiLE:每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如

文件的名字,文件状态及文件当前的位置等),这些信息是保存在一个结构体变量中的,该结构体

类型是由系统声明的,名为FILE

备注:有关结构体的内容见下面4篇

FLIE*:那么这样FILE*为结构体指针,指向文件信息区

文件指针<-->文件信息区<-->文件

通过文件指针变量能够间接找到与它关联的文件

附:FILE的头文件

(VS2013)

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

struct _iobuf重命名为FILE

4.操作文件的步骤

打开文件(fopen函数)-->操作(读取(输出)数据(fread函数)或写入(输入)数据)文件(fwrite函数)-->关闭文件(fclose函数)

1.fopen函数

声明:FILE * fopen ( const char * filename, const char * mode );

格式:FILE* p = fopen("文件路径", "mode");

mode为文件打开模式

简写的全称查询

r:read; w:write; a:append; rb:read binary wb:write binary ab:append binary

#include <stdio.h>
int main()
{
	FILE* p = fopen("a.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 1;//错误返回
	}
	fclose(p);
	p == NULL;//将野指针置空
	return 0;
}
输入&输出的含义

输入:将内存中的数据写入文件; 输出:将文件中的数据写入内存

可以用Cheat Engine软件或VS的反汇编来查看具体的执行细节

注意:只要使用fopen函数,一定要紧接着判断返回的指针是否为空指针

2.fclose函数

声明:int fclose ( FILE * stream );

格式:fclose(指针);

3.代码示例

#include <stdio.h>
int main()
{
	FILE* p = fopen("a.txt", "r");
	if (p == NULL)
	{
		perror("fopen");
		return 1;//错误返回
	}
	fclose(p);
	p = NULL;//将野指针置空
	return 0;
}

补充:绝对路径和相对路径

绝对路径:从盘符出发的路径

例如   C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe

相对路径:

例如 ..\..\a.txt

注意
1.fopen函数

2.为了防止写绝对路径时将"\+后面的内容"解释为转义字符,将\写成\\

正确示范:C:\\note\\123.txt   (C:\note\123.txt会被解释成\n换行符以及\123八进制数)

3.如果打开的文件已经存在,fopen函数会自动将文件清空

2.fclose函数

注意:fclose函数执行后,要手动将野指针置为空指针

因篇幅问题不能全部显示,请点此查看更多更全内容

Top