【C语言】深入了解文件:简明指南

请添加图片描述

请添加图片描述
Alt

🌈个人主页:是店小二呀
🌈C语言笔记专栏:C语言笔记
🌈C++笔记专栏: C++笔记

🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
请添加图片描述


文章目录

  • 一、文件的概念
    • 1.1 文件名:
    • 1.2 程序文件和数据文件
  • 二、数据文件(The data file)
    • 2.1 二进制文件和文本文件
  • 三、文件的打开和关闭
    • 3.1 流和标准流
      • 3.1.1 流
      • 3.1.2 标准流
  • 四、文件指针
    • 4.1 文件的打开和关闭


一、文件的概念

文件的概念:

文件是一种装载数据和信息的载体,存储着用户输入或者处理得到的各种有用信息,例如:文本文档、图片、音乐和视频等等(从硬盘上的文件是文件)。文件与内存的作用都是用于存储数据,区别在于内存是存储CUP的临时数据,无法持久化保存,会导致数据丢失。因此我们可以使用文件进行持久化保存。

1.1 文件名:

  • 一个文件要有一个唯一的文件标识,便于用户的引用
  • 文件名包括三个部分:文件路径+文件名主干+文件后缀(c:\code\test.txt)
  • 为了方便,文件标识常被称为文件名

1.2 程序文件和数据文件

在程序设计上,根据文件功能,一般分为两种文件:程序文件和数据文件

程序文件(用存储程序的文件):

  • 程序文件包括源程序文件(后缀为.c),目标文件(windows环境下后缀为.obj),可执行程序((windows环境下后缀为.exe)
  • 这里里的"程序"跟计算机技术的程序是不相同的,在这里指的为完成某项活动所规定的方式

数据文件(The data file):

  • 当文件内容不是程序时,而是程序运行时读写的数据(可以是读取数据的文件,也可以是输出内容的文件)。

二、数据文件(The data file)

本篇主要谈论数据文件的相关知识。对于之前处理数据的输出输入都是以终端为对象,终端的键盘输入数据,运行结果显示到显示器上。

有时也会把数据信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用(磁盘上的文件)

2.1 二进制文件和文本文件

根据数据的组织形式,数据文件被称为文本文件或者二进制文件

  • 二进制文件(存储二进制信息的文件):数据在内存中以二进制的形式存储,不加转换的输出到外存(磁盘)
  • 文本文件(存储文本信息的文件):数据在内存中以ASCII的形式存储,需要在存储前转换的输出到外存

注意】:字符一律以ASCII形式存储,数值型数据据可以使用ASCII形式存储,也可以使用二进制形式存储

问题】:存储整数10000,以ASCII形式或二进制形式输出到磁盘中,空间的占用情况?

在这里插入图片描述

占用情况】:

  • ASCII形式存储:将每一个数据看成一个字符‘1’‘0’‘0’‘0’‘0’‘0’,则磁盘中占用五个字节
  • 二进制形式存储:整型类型占用四个字节
int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中fclose(pf);pf = NULL;return 0;
}

检验下:在VS打开二进制文件

在这里插入图片描述
在这里插入图片描述


三、文件的打开和关闭

3.1 流和标准流

3.1.1 流

不同的外部设备的输入输出操作不同,为了方便统一,对各种设备进行方便的操作,提出了流的概念。

:往往是对一种有序连续具有方向性的数据的抽象描述。(从流读取,先打开流,之后操作)

在这里插入图片描述

3.1.2 标准流

问题】:为什么键盘输入数据,向屏幕上输入数据,并没有打开流呢?

在C语言程序启动时,默认打开三个流

  • stdin-标准输⼊流,在大多数的环境中从键盘输入
  • stdout-标准输出流,大多数的环境中输出至显示器界面。
  • stderr-标准错误流,大多数环境中输出到显示器界面。

以上三个流的类型是:FILE .*,通常称为文件指针。并且通过文件指针来维护流的各种操作,也导致使用scanf和printf等函数可以直接进行输入输出操作


四、文件指针

每当使用一个文件,都会在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(文件名,文件状态以及文件当前路径)。

这些信息被保存在一个结构体变量,并且该结构体类型是由系统声明的,取名FILE.(一般通过一个FILE指针来维护这个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;:不同编译器的FILE类型包含的内容不完全相同,但是大差不多

每当打开一个文件,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息(使用者不用关心细节)

文件指针变量指向某个文件的文件信息区(结构体变量),并且通过文件信息区就能访问该文件。(通过文件指针间接访问相关的文件)

在这里插入图片描述

4.1 文件的打开和关闭

ANSIC规定使用fopen函数来打开文件, fclose来关闭文件使用文件进行读写,需要三个步骤:

  1. 打开文件
  2. 文件操作
  3. 关闭文件
打开文件FILE *fopen(const char *filename,const char *mode);
关闭文件FILE *fclose(FILE *stream);

mode表示文件的打开模式,下⾯都是文件的打开模式

⽂件使⽤⽅式含义如果指定⽂件不存在
“r”(只读)为了输⼊数据,打开⼀个已经存在的⽂本⽂件出错
“w”(只写)为了输出数据,打开⼀个⽂本⽂件建⽴⼀个新的⽂件
“a”(追加)向⽂本⽂件尾添加数据建⽴⼀个新的⽂件
“rb”(只读)为了输⼊数据,打开⼀个⼆进制⽂件出错
“wb”(只写)为了输出数据,打开⼀个⼆进制⽂件建⽴⼀个新的⽂件
“ab”(追加)向⼀个⼆进制⽂件尾添加数据建⽴⼀个新的⽂件
“r+”(读写)为了读和写,打开⼀个⽂本⽂件出错
“w+”(读写)为了读和写,建议⼀个新的⽂件建⽴⼀个新的⽂件
“a+”(读写)打开⼀个⽂件,在⽂件尾进⾏读写建⽴⼀个新的⽂件
“rb+”(读写)为了读和写打开⼀个⼆进制⽂件出错
“wb+”(读写)为了读和写,新建⼀个新的⼆进制⽂件建⽴⼀个新的⽂件
“ab+”(读写)打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写建⽴⼀个新的⽂件

请添加图片描述

以上就是本篇文章的所有内容,在此感谢大家的观看!这里是店小二C语言笔记,希望对你在学习C语言中有所帮助!

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

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

相关文章

可靠的Mac照片恢复解决方案

当您在搜索引擎搜索中输入“Mac照片恢复”时,您将获得数以万计的结果。有很多Mac照片恢复解决方案声称他们可以在Mac OS下恢复丢失的照片。但是,并非互联网上的所有Mac照片恢复解决方案都可以解决您的照片丢失问题。而且您不应该花太多时间寻找可靠的Mac…

4月27日,上海Sui Meetup回顾与展望

活动吸引了超过200名报名者,其中的100多位技术爱好者亲临现场,一同见证了这一精彩时刻。 在这场为技术爱好者和开发者打造的盛会中,嘉宾们带来了内容丰富、见解独到的分享。 Sui 生态的活力与创新得到了充分展现。 在这场技术与创新的盛会…

2024-04-30 区块链-加密数字货币-法律风险-分析

摘要: 2024-04-30 区块链-加密数字货币之法律政策分析 加密数字货币之法律政策分析 加密数字货币(英文:Cryptocurrency,常常用复数Cryptocurrencies,又译密码货币,密码学货币)是一种使用密码学原理来确保交…

C# 读去Word文档(NPOI)

NPOI.dll文件下载: 百度网盘 请输入提取码 NPOI介绍: NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。 实现的操作: 获取Word文档所有Sheet表格。 读…

【C语言】自定义数据类型

建议学完指针再学 为什么要有自定义数据类型? 基本数据类型不能满足我们在编程中的要求时,需要自己定义一些数据类型使用。 结构体 如果我们想存储单个数据,可以直接用数组存储;那么如果我们想存储多个数据呢? 比…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

CST电磁仿真局部网格设置与仿真结构不参与仿真设置【基础教程】

局部网格设置 使用Local Mesh功能在特定结构&#xff08;区域&#xff09;设置网格 Simulation > Mesh > Local Mesh Properties 仿真模型的构成部件尺寸和复杂度是非常多样的&#xff0c;如果以最复杂的部分为准来划分网格不复杂的部分也会生成非常稠密的网格&#x…

如何判断嵌入式平台OpenCV在使用硬件编解码器?

01 涉及OpenCV编解码库的一个命令行工具 python3 -c import cv2; print(cv2.getBuildInformation()) 它可以打印输出详细的OpenCV编译参数和当前的媒体库相关参数&#xff0c;我的rk3588打印的信息是这样的&#xff1a; catlubancat:~$ python3 -c import cv2; print(cv2.getBu…

全面解析Unity至Unreal的项目迁移流程

引言 在游戏开发领域&#xff0c;Unity和Unreal Engine都是顶尖的选择&#xff0c;各自带有独特的优势。对于追求更高图形质量和更强大物理模拟的开发团队而言&#xff0c;将项目从Unity迁移到Unreal可能是一个值得考虑的选择。本文将详细介绍整个迁移流程&#xff0c;帮助开发…

[Java、Android面试]_24_Compose为什么绘制要比XML快?(高频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…

Linux操作系统·进程管理

一、什么是进程 1.作业和进程的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统&#xff1b;多任务是指Linux可以同时执行几个任务&#xff0c;它可以在还未执行完一个任务时又执行另一项任务。为了完成这些任务&#xff0c;系统上…

数据库锁介绍

目录 1.数据库锁 事务的隔离级别 读未提交&#xff08;Read Uncommitted&#xff09; 读已提交&#xff08;Read Committed&#xff09; 可重复读&#xff08;Repeatable Read&#xff09; 串行化&#xff08;Serializable&#xff09; 幻读和不可重复读区别 2.Mysql中有…

Android binder死亡通知机制

在Andorid 的binder系统中&#xff0c;当Bn端由于种种原因死亡时&#xff0c;需要通知Bp端&#xff0c;Bp端感知Bn端死亡后&#xff0c;做相应的处理。 使用 Bp需要先注册一个死亡通知&#xff0c;当Bn端死亡时&#xff0c;回调到Bp端。 1&#xff0c;java代码注册死亡通知 …

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

豆瓣9.7,这部Java神作第3版重磅上市!

Java 程序员们开年就有重磅好消息&#xff0c;《Effective Java 中文版&#xff08;原书第 3 版&#xff09;》要上市啦&#xff01; 该书的第1版出版于 2001 年&#xff0c;当时就在业界流传开来&#xff0c;受到广泛赞誉。时至今日&#xff0c;已热销近20年&#xff0c;本书第…

自然语言处理(NLP)简介

自然语言处理&#xff08;NLP&#xff09;技术是一种使用计算机处理和理解自然语言的技术。以下是一些NLP技术的例子&#xff1a; 机器翻译&#xff1a;NLP可以用于自动翻译一种语言到另一种语言。例如&#xff0c;Google Translate使用NLP技术来将文本从一种语言翻译成另一种语…

三维SDMTSP:GWO灰狼优化算法求解三维单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、单仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

CST Studio初级教程 五

本课程将实例讲解CST 3D建模。CST 3D 建模有三个途径&#xff1a;一种方法是用Brick、Sphere、Cone、Torus、Cylinder、Bond Wire指令绘制实体。第二种方法是用Extrude Face、Rotate Face、loft在已有模型基础上生成实体。第三种方法是&#xff0c;先用2D绘图指令绘制Curves&am…

Cross-Origin Read Blocking (CORB)

Cross-Origin Read Blocking (CORB) 是一种安全机制&#xff0c;用于保护Web应用免受跨域读取攻击。 跨域读取攻击可能会导致网站上的敏感信息被恶意代码访问和读取。这种攻击方式通常利用浏览器对不同源的资源访问的限制进行绕过。 CORB通过在浏览器中引入一种新的安全检测机…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…