C语言【文件操作】(1)

文章目录

  • 1.为什么使用文件
  • 2.文件是什么?
    • 2.1程序文件
    • 2.2数据文件
  • 3.二进制文件和文本文件
  • 4.文件的打开和关闭
    • 4.1流和标准流
      • 标准流
    • 4.2文件指针
    • 4.3文件的打开和关闭
  • 结语

1.为什么使用文件

很简单 长久的存储数据

如果没有文件,我们写程序所产生的数据是存储在电脑的内存中的,一但程序结束或退出,内存就会回收,数据就丢失了,等我们再次运行程序的时候,是找不到上次程序产生的数据的,如果末尾想要将数据进行长期的保存,那就可以使用文件。

2.文件是什么?

磁盘(硬盘)上的文件就是文件。
但是在程序设计中,我们说的文件有两种:程序文件、数据文件(是从文件功能的角度来分类的)。

2.1程序文件

程序文件包含源程序文件(xxx.c),目标文件(在Windows环境下为xxx.obj),可执行程序(在Windows环境下为xxx.exe).

2.2数据文件

该类型文件的内容就不是程序,而是程序运行时所存入的数据,例如程序运行需要读取数据的文件,或输出产生并输出内容的文件。

该文章讨论的是数据函数

3.二进制文件和文本文件

根据数据的存储模式,数据文件由分为文本文件二进制文件

数据是以二进制的形式在存储在内存中的,如果不转换的输出或者存储在文件中,就是二进制文件

如果在输出上要求以ASCII码的形式存储,则需要在存储前进行转换。以ASCII字符的形式存储文件就是文件文件

那么一个数据是怎么存储在文件上的呢?

字符一律按照ASCII码的形式存储,数值形式的数据既可以用ASCII码形式存储,也可以用二进制的形式存储。

假设有个整数10000,如果以ASCII码的形式存储,就会占用磁盘中的5个字节,如果是以二进制存储,则只占用磁盘中的4个字节。
在这里插入图片描述

4.文件的打开和关闭

4.1流和标准流

我们在程序的数据需要输出到各种外部设备,也需要从各种外部设备中获取数据,不同设备的输入输出操作各不相同。
为了方便程序员对各种设备进行操作,我们就抽象出了流的概念,我们可以将流想象成流淌着数据的河。
C程序针对文件、画面、键盘等数据的输入输出都是通过流操作的。
一般情况下,我们想往流里写数据,或者往流里读取数据,都是要打开流,然后再进行操作。

标准流

那为什么我们从键盘输入数据、向屏幕输出数据时,并没有打开流这个操作呢?
那是因为C语言程序启动时,会自动打开三个流:

  • stdin-标准输入流:在大多数的环境下从键盘输入,scanf函数就是从标准输入流中读取数据。
  • stdout-标准输出流:在大多数环境下将数据输出到屏幕上,printf函数就是将数据输出到标准输出流上的。
  • stderr-标准错误流:在大多数环境下,将错误信息输出到屏幕上

就是因为默认打开了这三个流,所以我们在使用scanf、printf等函数就可以直接的进行输入输出操作。

stdin、stdout、stderr这三个流的类型都是FILE*,该类型通常被称为文件指针。
C语言就是通过FILE*的文件指针来维护流的各种操作的。

4.2文件指针

每个被使用的文件都在内存中开辟了一个对应的文件信息区,用来存放文件的相关信息(如文件名,文件状态和文件当前的位置)。这些信息都存放在一个结构体变量中,该结构体类型由系统声明为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;

但VS2022编译环境中已经不一样了:

    typedef struct _iobuf{void* _Placeholder;} FILE;

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。
每当打开一个文件时,系统就会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,我们使用者并不需要关心其中的细节。

创建FILE*类型的指针变量:

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

将pf定义为一个FILE类型的指针变量,可以使pf指向某个文件的文件信息区(使一个结构体变量),通过该文件信息区中的信息就可以访问该文件。
也就是说,我们可以通过文件指针变量来间接找到与它关联的文件
如图:
在这里插入图片描述

4.3文件的打开和关闭

文件在读写之前要打开文件,使用结束后应该关闭文件(常识)。
在编写程序时,打开文件的同时会返回一个FILE*类型的指针,这也相当于建立了指针和文件的关系。
ANSI C规定了使用fopen函数来打开文件,使用fclose来关闭文件。

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

如果fopen函数打开文件失败,会返回NULL

mode表示文文件的打开方式:

文件使用方式含义如果指定文件不存在
“r”(只读为了输⼊数据,打开⼀个已经存在的⽂本⽂件出错
“w”(只写)为了输出数据,打开⼀个⽂本⽂件(每一次打开都会清空文件内容)建⽴⼀个新的⽂件
“a”(追加)向⽂本⽂件尾添加数据建⽴⼀个新的⽂件
“rb”(只读)为了输⼊数据,打开⼀个⼆进制⽂件出错
“wb”(只写)为了输出数据,打开⼀个⼆进制⽂件(每一次打开都会清空文件内容)建⽴⼀个新的⽂件
“ab”(追加)向⼀个⼆进制⽂件尾添加数据建⽴⼀个新的⽂件
“r+(读写)”为了读和写,打开⼀个⽂本⽂件出错
“w+(读写)”为了读和写,打开⼀个⽂本⽂件(每一次打开都会清空文件内容)建⽴⼀个新的⽂件
“a+(读写)”打开⼀个⽂件,在⽂件尾进⾏读和写建⽴⼀个新的⽂件
“rb+(读写)”为了读和写打开⼀个⼆进制⽂件出错
“wb+(读写)”为了读和写打开⼀个⼆进制⽂件(每一次打开都会清空文件内容)建⽴⼀个新的⽂件
“ab+(读写)”打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写建⽴⼀个新的⽂件

实际代码:

int main()
{//打开文件FILE* pf = fopen("text.txt", "w");if (pf == NULL){perror("fopen");exit(1);//该函数的头文件为<stdlib.h>}//操作文件fputs("fopen example", pf);//关闭文件fclose(pf);pf = NULL;return 0;
}

运行前:在这里插入图片描述

运行后:
在这里插入图片描述

结语

最后感谢您能阅读完此片文章,如果有任何建议或纠正欢迎在评论区留言。如果您认为这篇文章对您有所收获,点一个小小的赞就是我创作的巨大动力,谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业内部适用的五大知识库工具测评推荐

随着企业规模的不断扩大和业务复杂性的增加&#xff0c;要想更高效地进行企业管理就不得不使用知识库管理工具。本文将对五款企业内部适用的知识库工具进行测评推荐&#xff0c;帮助企业选择出更适合自己的知识库管理工具。 一、Helplook AI知识库 Helplook AI知识库是一款搭建…

【LeetCode刷题记录】124. 二叉树中的最大路径和

124 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的…

【Java开发的我出书啦,各位同仁快过来围观】!!!

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容出书的目的出书的过程书籍的内容 &#x1f4e5;博主的话 &#x1f50a;博主介绍 文章目录 &#x1f50a;博主介绍&#x1f964;本文内容出书的目的出书的过程书籍的内容 &#x1f4e5;博主的话 &#x1f33e;阅读前&#x…

「网络流 24 题」太空飞行计划 【最大权值闭合图】

「网络流 24 题」太空飞行计划 题意 有 n n n 个实验 和 m m m 个器械&#xff0c;每个实验都需要若干个指定的器械才能进行 实验 i i i 的盈利为 p i p_i pi​&#xff0c; 器械 j j j 的花销为 c j c_j cj​ 找出纯利润最大的实验计划 思路 这是非常典型的最大权值…

如何定时关闭程序

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 前面的流程步骤参考这条攻略&#xff1a; 快捷自由定时重启、注销、关机 只不过最后的地方&#xff0c;选择 关闭程序 &#xff0c;再填写程序名称即可 补…

全栈开发之路——前端篇(5)组件间通讯和接口等知识补充

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 辅助文档&…

Linux中的软连接和硬链接

一、软和硬链接连接 在Linux系统中&#xff0c;软连接&#xff08;符号链接&#xff09;和硬链接是文件系统中两种不同类型的链接&#xff0c;它们用于创建对文件的引用。下面详细解释这两种链接的特点和区别&#xff1a;、 软连接&#xff08;符号链接&#xff09; 定义&…

西红柿叶病害检测(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

1.基于最新的YOLOv8训练的西红柿病害检测模型&#xff0c;和基于PyQt5制作的可视西红柿病害系统&#xff0c;包含登陆页面、注册页面和检测页面&#xff0c;该系统可自动检Bacterial Spot, Early_Blight, Healthy, Late_blight, Leaf Mold, Target_Spot, black spot&#xff0c…

电商风口的最后一班快车?有些人甚至正在All in视频号!

我是王路飞。 当抖音、快手、淘宝上的商家还在内卷的时候&#xff0c;有些人却转移了阵地&#xff0c;搭上了电商风口的“最后一般列车”&#xff0c;甚至正在All in 视频号。 内容来源于【醒醒团队-电商王路飞】 随着“微视”想要三分天下野心的失败&#xff08;与抖音、快手…

SD-WAN:企业低成本与高性能组网的理想选择

在竞争日益激烈的市场中&#xff0c;企业要立足就需要一种既能控制成本又能保证卓越性能的网络解决方案。尽管传统组网方式稳定可靠&#xff0c;但其高昂的硬件投入和升级成本让许多企业望而却步&#xff0c;而SD-WAN为企业提供了一个理想的解决方案。 成本效益&#xff1a;精打…

[Kubernetes] KubeKey 部署 K8s v1.28.8

文章目录 1.K8s 部署方式2.操作系统基础配置3.安装部署 K8s4.验证 K8s 集群5.部署测试资源 1.K8s 部署方式 kubeadm: kubekey, sealos, kubespray二进制: kubeaszrancher 2.操作系统基础配置 主机名内网IP外网IPmaster192.168.66.2139.198.9.7node1192.168.66.3139.198.40.17…

独家专访辉羲智能章健勇:数据闭环定义芯片,帮车厂造中国版FSD

‍采访、编辑 |德新 撰文 |苗岭 辉羲智能&#xff0c;智能驾驶芯片行业最新的进入者。 这家公司成立于2022年&#xff0c;今年辉羲即将发布它的首款高阶智驾芯片。而另外两家智驾计算平台的头部公司地平线和黑芝麻已经在前不久分别向港交所提交了IPO申请。 国内的自动驾驶行…

【问题记录】Windows命令行中执行.exe文件路径有空格的解决方法

Windows命令行中执行.exe文件路径有空格的解决方法 一&#xff0c;问题现象&#xff1a;二&#xff0c;问题原因三&#xff0c;解决方法 一&#xff0c;问题现象&#xff1a; 在Windows命令行中执行路径中带空格的.exe文件&#xff1a; 会报错&#xff1a; 二&#xff0c;问…

数据库系统理论——关系数据库

文章目录 一、关系&#xff08;数据结构&#xff09;1、概述2、名词解释3、关系模式、关系数据库、关系数据库模式4、基本关系的性质 二、关系操作&#xff08;数据操作&#xff09;三、关系的完整性1、实体完整性2 、参照完整性3、用户自定义的完整性 四、关系代数五、习题 前…

Qwen大模型实践之初体验

Qwen大模型实践之初体验 测试机器, 使用InternStudio提供的开发机&#xff0c;配置如下&#xff1a; 部分资源详细信息&#xff1a; # CPUIntel(R) Xeon(R) Platinum 8369B CPU 2.90GHz# GPU(base) rootintern-studio-50014188:~# studio-smi Running studio-smi by vgpu-smiW…

有什么快速ai智能生成思维导图的软件?6个软件教你轻松制作思维导图

有什么快速ai智能生成思维导图的软件&#xff1f;6个软件教你轻松制作思维导图 思维导图是一种图形化的工具&#xff0c;用于组织和表示思维过程中的概念和想法之间的关系。在现代的工作和学习环境中&#xff0c;快速制作思维导图对于理清思路、规划项目、记录笔记等方面都非常…

如何设置cPanel的自动备份

近期我们购买了Hostease美国VPS云主机产品&#xff0c;由于需要设置服务器的自动备份&#xff0c;我们向Hostease技术团队进行了咨询&#xff0c;他们提到VPS云主机的cPanel面板包含自动备份功能&#xff0c;下面我们就介绍如何进行自动备份的设置。 首先你需要登录到WHM面板&…

从封号之痛出发:探索自养号测评,助力eBay卖家破局重生

在跨境电商的浪潮中&#xff0c;eBay作为知名的电商平台&#xff0c;吸引了众多卖家前来拓展业务。然而&#xff0c;近年来不少卖家反映&#xff0c;因环境问题导致eBay账号被封号&#xff0c;成为他们业务发展的痛点。为此&#xff0c;本文将探讨如何通过自养号测评&#xff0…

不止于量子!“光与热”两大架构重塑计算前沿

在探索超越传统计算机性能的途径中&#xff0c;量子计算通常被视为一种前沿技术。然而&#xff0c;它并非解决所有计算挑战的唯一方案。事实上&#xff0c;最近有两家公司推出了基于独特物理原理的计算设备&#xff0c;这些设备专门针对特定应用设计&#xff0c;据称在处理特定…

uniapp + vue3 使用axios

场景 uniapp自带的uni.request不太好用&#xff0c;也有可能是自己用axios用的太熟悉了&#xff0c;所以还是用axios趁手点&#xff0c;所以尝试在uniapp中使用axios。 操作 因为uniapp项目没有package.json&#xff0c;所以先在项目根目录下执行 npm init, 执行完毕后直接…