C语言文件操作与管理

news2024/11/27 9:41:13

一、为什么使用文件

在我们前面练习使用结构体时,写通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。

二、什么是文件(文件的概念和分类)

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

(一)、程序文件

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

(二)、数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
注意: 接下来我们 讨论的是数据文件。
在以前各章所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。

三、文件名

①:一个文件要有一个 唯一的 文件标识,以便用户识别和引用。
②:文件名包含3 部分:文件路径 + 文件名主干 + 文件后缀
例如: c:\code\test.txt
③:为了方便起见,文件标识常被称为 文件名

四、文件的打开和关闭

(一)、文件指针

缓冲文件系统中,关键的概念是 文件类型指针 ,简称 文件指针
每个被使用的文件都在内存中开辟了一个相应的 文件信息区 ,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统 声明的, 取名FILE.
例如, VS2013 编译环境提供的 stdio.h 头文件中有以下的文件类型申明:
struct _iobuf {
	char* _ptr;
	int _cnt;
	char* _base;
	int _flag;
	int _file;
	int _charbuf;
	int _bufsiz;
	char* _tmpfname;
};
typedef struct _iobof FILE;
不同的 C 编译器的 FILE 类型包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE 结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE 的指针来维护这个 FILE 结构的变量,这样使用起来更加方便。

(二)、文件的打开和关闭

文件在读写之前应该先 打开文件 ,在使用结束之后应该 关闭文件
在编写程序的时候,在打开文件的同时,都会返回一个 FILE*的指针 变量指向该文件,也相当于建立了指针和文件的关系。
ANSIC 规定使用 fopen函数 来打开文件, fclose 来关闭文件。
//打开文件
FILE* fopen(const char* filename, const char* mode);
//关闭文件
int fclose(FILE* stream);
1.打开文件——fopen函数
1.1函数声明:
FILE * fopen ( const char * filename, const char * mode );

①:第一个参数是待打开文件的文件名;

而上面提到。文件名包含三个部分:文件路径+文件名主干+文件后缀

而文件路径又有两种:

第一种是相对路径,如下面一个使用实例中“data.txt”就是相对路径,就是在此路径下寻找,只区分文件名主干+后缀。

第二种是绝对路径,就是指一个完整的文件路径。

②:第二个参数是打开文件的方式,如下图:

③:函数返回类型:

如果文件成功打开,该函数将返回指向 FILE 对象的指针,该对象可用于在将来的操作中标识流;
如果打开失败,则将返回空指针。

1.2函数使用实例

我们以“r”的方式打开文件,若当前路径文件存在,则正常打开;文件不存在则打开失败。

int main()
{
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("打开成功!\n");
	return 0;
}

可以看见,当前路径下是没有"data.txt"这个文件的,所以打开出错,fopen返回NULL,运行结果如下:

当我提前创建了“data.txt”文件后,则打开成功。如下图:

所以我们要根据需要,合理选择打开方式。

2.关闭文件——fclose函数

关闭文件很简单,和free类似,如下:

int main()
{
	//打开文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	printf("打开成功!\n");

	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

(未完待续)。。。

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

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

相关文章

wxWidgets(1):在Ubuntu 环境中搭建wxWidgets 库环境,安装库和CodeBlocks的IDE,可以运行demo界面了,继续学习中

1,选择使用 wxWidgets 框架 选择这个主要是因为完全的开源,不想折腾 Qt的库,而且打包的文件比较大。 网络上面有很多的对比,而且使用QT的人比较多。 但是我觉得wxwidgets 更加偏向 c 语法本身,也有助学习C。 没有太多…

PHP 二手物品交易网站系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 二手物品交易网站系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88385559 二、功能介…

容器网络之Flannel

​ 第一个问题位置变化,往往是通过一个称为注册中心的地方统一管理的,这个是应用自己做的。当一个应用启动的时候,将自己所在环境的 IP 地址和端口,注册到注册中心指挥部,这样其他的应用请求它的时候,到指挥…

数据结构与算法基础-(4)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

用数据观测Page Cache

与 Page Cache 有关的场景: 服务器的 load 飙高; 服务器的 I/O 吞吐飙高; 业务响应时延出现大的毛刺; 业务平均访问时延明显增加 上边这些问题,很可能是由于 Page Cache管理不到位引起的,因为 Page Cache 管…

将数据包装成一个图数据结构(torch_geometric)

import torch from torch_geometric.data import Datax torch.tensor([[0, 1], [2, 3], [4, 5]], dtypetorch.float) # 节点特征矩阵(三个节点,每个节点两个特征) edge_index torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtypetorch.long…

chrome插件-入门

chrome插件的作用 1、屏蔽网页上的广告,提高浏览速度和减少视觉干扰 2、捕捉和编辑网页截图 3、改善在社交媒体平台上的体验,例如提供额外的功能,或自定义外观和布局 4、网页翻译 5、保存和组织网页书签和笔记 6、管理日程安排,设…

第十章 异常

python使用异常的特殊对象管理程序执行期间发生的错误。每当发生错误时,python会创建异常对象。如果编写了处理该异常的代码,程序将继续运行;如果未处理,程序将显示traceback。 异常是使用try-except代码块处理的。使用try-excep…

pytorch3D Windows下安装经验总结

一、说明及准备工作 最近在安装pytorch3D的时候遇到了很多问题,查了很多博客,但发现讲的都不太全,所以特将自己的及收集到的安装过程经验总结如下。我是在Anaconda中虚拟环境下安装的。 1.1准备工作 官方安装教程如下:https://…

CSS基础介绍2

CSS使用三种方式 方式1&#xff1a;在标签的style属性上设置CSS样式&#xff08;行内样式&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>在标签的style属性上设置CSS样式</title>…

第七章 用户和组管理

7.1 Linux中的用户和组的分类 用户类别 超级用户&#xff08;0&#xff09; root 系统用户(1-999) 一般用户(1000-60000) 组类别 管理组 root 基本组&#xff08;默认组/主组&#xff09; 附加组&#xff08;额外组&#xff09; 7.2 用户管理 7.2.1 添加新用户 语法 useradd 【…

通过java向jar写入新文件

文章目录 原始需求分析实施步骤引入依赖核心编码运行效果 原始需求 有网友提问&#xff1a; 我想在程序中动态地向同一个jar包中添加文件&#xff0c;比如&#xff0c;我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现&…

路由模式和打包优化

1. 路由模式-将路由改成history模式 hash模式带#&#xff0c;#后面的地址变化不会引起页面的刷新history没有#&#xff0c;地址变化会引起页面刷新&#xff0c;更符合页面地址的规范&#xff08;开发环境不刷新-webpack配置&#xff09;将路由模式修改成history模式-代码位置(s…

钉钉h5微应用调试 整理

钉钉 H5微应用整理 1.申请H5微应用2.登录3.调试 1.申请H5微应用 https://open.dingtalk.com/ 登录钉钉开发平台。 应用appId、CorpId都可以在网站上自行查找 应用首页地址&#xff08;指手机端显示地址&#xff09; pc端首页地址&#xff08;指电脑端显示地址&#xff09; 我这…

Spring Cloud Gateway学习(1)—— Gateway 的基本概念 引入依赖需要注意的事项 +解决方案 全局网关的入门使用案例

前言 Spring Cloud Gateway 基于 Spring Boot 2&#xff0c;是 Spring Cloud 的全新项目。Gateway 旨在提供一种简单而有效的途径来转发请求&#xff0c;并为它们提供横切关注点。 gateway相当于所有服务的门户&#xff0c;将客户端请求与服务端应用相分离&#xff0c;客户端…

力扣 -- 10. 正则表达式匹配

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:bool isMatch(string s, string p) {int ms.size();int np.size();//处理后续映射关系s s;//处理后续映射关系p p;vector<vector<bool>> dp(m1,vector<bool>(n1));//初始化dp[0][0]true…

走进Spring的世界 —— Spring底层核心原理解析(一)

文章目录 前言一、Spring中是如何创建一个对象二、Bean的创建过程三、推断构造方法四、AOP大致流程五、Spring事务 前言 ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext("config.xml"); UserService userService (UserService) cont…

pytorch第一天(tensor数据和csv数据的预处理)lm老师版

tensor数据&#xff1a; import torch import numpyx torch.arange(12) print(x) print(x.shape) print(x.numel())X x.reshape(3, 4) print(X)zeros torch.zeros((2, 3, 4)) print(zeros)ones torch.ones((2,3,4)) print(ones)randon torch.randn(3,4) print(randon)a …

koa基础应用

不要把koa想得太复杂&#xff0c;他就是一个Node框架而已。 在本地应用安装好Node和koa后&#xff0c;先实现一下简单的服务app.js&#xff0c;代码如下&#xff1a; const Koa require(koa) const app new Koa(); app.use(async (context) > {context.body hello Koa …