承接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函数执行后,要手动将野指针置空