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

承接74.【C语言】文件操作(1)文章

目录

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

1.流

2.标准流

3.文件指针

FILE 两层含义

附:FILE的头文件

4.操作文件的步骤

1.fopen函数

​编辑

简写的全称查询

输入&输出的含义

2.fclose函数

3.代码示例

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

注意


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

1.流

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

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

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

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

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

2.标准流

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

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

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

stdin 标准输入流(standard input),用于从键盘输入数据

stdout 标准输出流(standard output),用于输出至显示器界面(写入显存)

stderr 标准错误流(standard error),用于打印错误信息

三个流的类型是: FILE * ,通常称为文件指针(全称:文件类型指针)

3.文件指针

FILE 两层含义

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

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

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

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

20.【C语言】初识结构体(重要)

48.【C语言】结构体补充

63.【C语言】再议结构体(上)

64.【C语言】再议结构体(下)

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的反汇编来查看具体的执行细节

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;
}

这里的a.txt为相对路径(此处指在可执行文件的当前目录下有一个a.txt文件)

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

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

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

相对路径:

.表示当前目录,而..表示上一级目录

例如 ..\..\a.txt

注意
1.fopen函数

1.如果打开成功,则返回文件信息区的起始地址;如果打开失败则返回空指针,因此fopen函数执行后要判断指针是否为空

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

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

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

2.fclose函数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值