文件操作(详细讲解)(1/2)

news2025/3/6 10:18:16

你好这里是我说风俗,希望各位客官点点赞,收收藏,关关注,各位对我的支持是我持续更新的动力!!!!第二期会马上更的关注我获得最新消息哦!!!!!


1.  为什么使用文件

2.  什么是文件?

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

4.  文件的打开和关闭

5.  文件的顺序读写

6.  文件的随机读写

7.  文件读取结束的判定

8.  文件缓冲区


正文如下


1.  为什么使用文件?

如果没有文件,我们写的程序的数据是储存在电脑内存中的,如果程序退出,内存回收,数据就会丢失,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们就可以使用文件。


2.  什么是文件

磁盘(硬盘)上的文件是文件。

但是在程序设计中,我们一般谈的文件有两种:程序文件,数据文件(从文件功能的角度来分类的)。

2.1  程序文件

程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。


2.2  数据文件

文件内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

我们现在讨论数据文件。

在以前所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。

其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上的文件。


2.3  文件名

一个文件要有一个唯一的文件标识,以便用户的识别和引用。

文件名通常包括3个部分:文件路径+文件名主干+文件后缀

例如:c:\code\test.txt

为方便起见,文件表示常被称为文件名


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

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

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

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

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

字符都以ASCII形式储存,数值型数据既可以用ASCII形式储存,也可以使用二进制储存。

如果有整数10000,如果ASCII码的形式输出到键盘,则磁盘中占用5个字节(每一个字符一个字节),而二进制形式输出,则在磁盘中只占用4个字节。

测试代码:
#include <stdio.h>
int main()
{
	int a = 10000;
	FILE* pf = fopen("test.txt,wb");
	fwrite(&a, 4, 1, pf);//二进制形式写到文件中
	fclose(pf);
	pf = NULL;
	return  0;

}

4.  文件的打开和关闭

4.1  流和标准流

4.1.1  流

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便操作,我们抽象出了流的概念,我们可以吧流想像成流淌着字符的河流

C程序针对文件,画面,键盘登的数据输入输出操作都是通过流操作的。

一般情况下,我们想向流里写数据,或者从中读取数据,都要打开流,然后操作。


4.1.2  标准流

那为什么我们从键盘中输入数据,向屏幕上输出数据,并没有打开流呢?

那是因为C语言程序在启动的时候,默认打开了3个流:

1.  stdin - 标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。

2.  stdout - 标准输出流,大多数的环境中输出至显示器界面,printf函数就是将信息输出到标准输出流中。

3.  stderr - 标准错误流,大多数环境中输出到显示器界面。

这是默认打开的3个流,我们使用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;

不同的C编译器的FILE类型包含的内容不完全相同,大同小异。

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

一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更方便。

下面我们可以创建一个FILE*的指针变量。

1. FILE*  PF  ;//文件指针变量

定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够直接找到于它相关联的文件。


4.3  文件的打开和关闭

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件

在编写程序的时候,在打开文件的时候,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

ANSIC规定使用fopen函数来打开文件,fclose来关闭文件。

1  .//打开文件
2  FILE * fopen ( const  char  *  filename,const  char  *  mode  );
3
4  //关闭文件
5  int fclose ( FILE * stream );

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

实例代码:

/* fopen  fclose  example */
#include <stdio.h>
int main()
{
	FILE* pFile;
	//打开文件
	pFile = fopen("myfile.txt", "w");
	//文件操作
	if (pFile != NULL)
	{
		fputs("fopen example", pFile);
		//关闭文件
		fclose(pFile);
	}
	return 0;
}

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

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

相关文章

[AI]从零开始的so-vits-svc歌声推理及混音教程

一、前言 在之前的教程中已经为大家讲解了如何安装so-vits-svc以及使用现有的模型进行文本转语音。可能有的小伙伴就要问了&#xff0c;那么我们应该怎么使用so-vits-svc来进行角色歌曲的创作呢&#xff1f;其实歌曲的创作会相对麻烦一些&#xff0c;会使用到好几个软件&#x…

SpringMVC控制器定义:@Controller注解详解

文章目录 引言一、Controller注解基础二、RequestMapping与请求映射三、参数绑定与数据校验四、RestController与RESTful API五、控制器建议与全局处理六、控制器测试策略总结 引言 在SpringMVC框架中&#xff0c;控制器(Controller)是整个Web应用的核心组件&#xff0c;负责处…

免费分享一个软件SKUA-GOCAD-2022版本

若有需要&#xff0c;可以下载。 下载地址 通过网盘分享的文件&#xff1a;Paradigm SKUA-GOCAD 22 build 2022.06.20 (x64).rar 链接: https://pan.baidu.com/s/10plenNcMDftzq3V-ClWpBg 提取码: tm3b 安装教程 Paradigm SKUA-GOCAD 2022版本v2022.06.20安装和破解教程-CS…

学习threejs,使用LineBasicMaterial基础线材质

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.LineBasicMaterial1.…

java面试题(一)基础部分

1.【String】StringBuffer和StringBuilder区别&#xff1f; String对象是final修饰的不可变的。对String对象的任何操作只会生成新对象&#xff0c;不会对原有对象进行操作。 StringBuilder和StringBuffer是可变的。 其中StringBuilder线程不安全&#xff0c;但开销小。 St…

Mac mini M4安装nvm 和node

先要安装Homebrew&#xff08;如果尚未安装&#xff09;。在终端中输入以下命令&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示操作完成Homebrew的安装。 安装nvm。在终端中输入以下命令&#xf…

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装&#xff08;四&#xff09;&#xff1a;国内版火狐浏览器 Ubuntu系统会自带火狐浏览器&#xff0c;但该浏览器不是国内版的&#xff0c;如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯&#xff0c;建议重装火狐浏览器为国内版的…

react中如何使用使用react-redux进行数据管理

以上就是react-redux的使用过程&#xff0c;下面我们开始优化部分&#xff1a;当一个组件只有一个render生命周期&#xff0c;那么我们可以改写成一个无状态组件&#xff08;UI组件到无状态组件&#xff0c;性能提升更好&#xff09;

DeepSeek使用手册分享-附PDF下载连接

本次主要分享DeepSeek从技术原理到使用技巧内容&#xff0c;这里展示一些基本内容&#xff0c;后面附上详细PDF下载链接。 DeepSeek基本介绍 DeepSeek公司和模型的基本简介&#xff0c;以及DeepSeek高性能低成本获得业界的高度认可的原因。 DeepSeek技术路线解析 DeepSeek V3…

新品速递 | 多通道可编程衰减器+矩阵系统,如何破解复杂通信测试难题?

在无线通信技术快速迭代的今天&#xff0c;多通道可编程数字射频衰减器和衰减矩阵已成为测试领域不可或缺的核心工具。它们凭借高精度、灵活配置和强大的多通道协同能力&#xff0c;为5G、物联网、卫星通信等前沿技术的研发与验证提供了关键支持。从基站性能测试到终端设备校准…

Data truncation: Out of range value for column ‘allow_invite‘ at row 1

由于前端传递的数值超过了mysql数据库中tinyint类型的取值范围&#xff0c;所以就会报错。 Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column allow_invite at row 1at com.mysql.cj.jdbc.exceptions.SQLExcept…

HCIA—IP路由静态

一、概念及作用 1、概念&#xff1a;IP路由是指在IP网络中&#xff0c;数据从源节点到目的节点所经过的路径选择和数据转发的过程。 2、作用 ①实现网络互联&#xff1a;使不同网段的设备能够相互通信&#xff0c;构建大规模的互联网络 ②优化网络拓扑&#xff1a;根据网络…

Hz的DP总结

前言&#xff1a; 鉴于本人是一个DP低手&#xff0c;以后每写一道DP都会在本篇博客下进行更新&#xff0c;包括解题思路&#xff0c;方法&#xff0c;尽量做到分类明确&#xff0c;其中的题目来自包括但并不限于牛客&#xff0c;洛谷&#xff0c;CodeForces&#xff0c;AtCode…

【三极管8050和8550贴片封装区分脚位】

这里写自定义目录标题 三极管8050和8550贴片封装区分脚位三极管8050三极管8550 三极管8050和8550贴片封装区分脚位 三极管8050 增加了 检查列表 功能。 [ NPN型三极管&#xff08;SS8050&#xff09; ]: SS8050的使用及引脚判断方法 三极管8550

C# Unity 唐老狮 No.6 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

二、Visual Studio2022配置OpenGL环境

文章目录 一、OpenGL库的下载二、OpenGL环境配置三、测试代码演示 一、OpenGL库的下载 OpenGL配置的库是GLFWGLAD &#xff0c;GLFW 主要用于创建 OpenGL 窗口和管理输入&#xff1b;GLAD 主要用于加载 OpenGL 函数 GLFW下载地址 下载Windows的32bit版本即可。 下载完成解压如…

YOLOv8改进------------SPFF-LSKA

YOLOv8改进------------SPFF-LSKA 1、LSAK.py代码2、添加YAML文件yolov8_SPPF_LSKA.yaml3、添加SPPF_LSKA代码4、ultralytics/nn/modules/__init__.py注册模块5、ultralytics/nn/tasks.py注册模块6、导入yaml文件训练 1、LSAK.py代码 论文 代码 LSKA.py添加到ultralytics/nn/…

240 Vocabulary Words Kids Need to Know

《240 Vocabulary Words Kids Need to Know》是美国学乐出版社&#xff08;Scholastic&#xff09;推出的词汇学习系列练习册&#xff0c;专为美国小学阶段&#xff08;G1-G6&#xff09;设计&#xff0c;基于CCSS&#xff08;美国共同核心州立标准&#xff09;编写&#xff0c…

AI-Deepseek + PPT

01--Deepseek提问 首先去Deepseek问一个问题&#xff1a; Deepseek的回答&#xff1a; 在汽车CAN总线通信中&#xff0c;DBC文件里的信号处理&#xff08;如初始值、系数、偏移&#xff09;主要是为了 将原始二进制数据转换为实际物理值&#xff0c;确保不同电子控制单元&…

【五.LangChain技术与应用】【8.LangChain提示词模板基础:从入门到精通】

早上八点,你端着咖啡打开IDE,老板刚甩来需求:“做个能自动生成产品描述的AI工具”。你自信满满地打开ChatGPT的API文档,结果半小时后对着满屏的"输出结果不稳定"、"格式总出错"抓耳挠腮——这时候你真需要好好认识下LangChain里的提示词模板了。 一、…