当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/456377.html

相关文章:

  • Redis 使用记录
  • IDEA实用小技巧
  • PEI转染试剂对血清的敏感性研究
  • 手机怎样改网络ip地址?内容详尽实用
  • 使用Pybind11,Python调用C++动态库
  • 提交gitlab
  • 金慧-综合管理信息系统 LoginBegin.aspx SQL注入复现
  • RHCSA的学习(4)
  • linux-二进制工具
  • 《数据结构》学习系列
  • 沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞
  • JVM 内存模型与垃圾回收过程详解
  • python:PyPDF2 将多个图片转换为pdf,再合并成一个PDF文件
  • Python精选200Tips:186-190
  • C、C++常用数据结构:链表
  • 【devops】devops-ansible之剧本变量使用
  • 《Linux从小白到高手》理论篇:一文概览常用Linux重要配置文件
  • 采购管理流程:掌握最后阶段的关键要点
  • cherry-markdown开源markdown组件详细使用教程
  • Android SystemUI组件(10)禁用/重启锁屏流程分析
  • 【Geeksend邮件营销】外贸邮件中的一些常用语
  • 配置静态ip
  • [LeetCode] LCR170. 交易逆序对的总数
  • 大开眼界,原来指针还能这么玩?
  • 揭秘选择知识产权管理系统的常见误区,避免踩坑
  • 计算机组成原理之存储器的分类
  • Linux(不同版本系统包含Ubuntu)下安装mongodb详细教程
  • 如何扫描HTTP代理:步骤与注意事项
  • 【分布式微服务云原生】gRPC与Dubbo:分布式服务通信框架的双雄对决
  • Python | Leetcode Python题解之第450题删除二叉搜索树中的节点