C语言之文件操作篇(1)

news2025/2/26 6:16:37

目录

为什么要使用文件

什么是文件

文件名

文件名的访问路径

相对路径

绝对路径

文件类型

文件缓冲区

文件指针

文件的打开与关闭

fopen

 fclose

打开方式如下

r


今天我们来介绍C语言的文件操作。之前我们实现的通讯录有两个问题

  • 信息太多,空间小了;信息太少,空间大了。怎么解决呢?动态内存管理!已经解决了
  • 录入的个人信息,等程序结束之后,就不在了。因为数据是存放在内存中的,只要程序退出,掉电,都会丢失。怎么解决?文件存储,数据库!本篇我们就来讲C语言文件操作

为什么要使用文件

  • 使用文件我们可以将数据直接存放到电脑的硬盘上,做到了数据的持久化。我们一般数据持久化的方法有:
  1. 把数据存放到磁盘文件
  2. 存放到数据库等方式

今天我们重点介绍【把数据存放到磁盘文件上】 

什么是文件

在程序运行起来时,程序中数据都是放在内存中的。如果要保存这些数据,不至于丢失,我们可以【使用文件】来保存信息,文件放在【硬盘】上。本片就是介绍【C语言操作文件】

磁盘上的文件是文件。

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

  • 程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
  • 数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

本章讨论的是【数据文件】

在以前各章所处理数据 的输入输出都是以【终端】为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。其实有时候我们会把信息输出到【磁盘】上,当需要的时候再从【磁盘】上把数据读取到【内存】中使用,这里处理的就是【磁盘上文件】(提供数据和存储数据)。

 

文件名

一个文件要有一个唯一的文件标识,以便用户识别和引用。文件标识常被称为【文件名】

文件名包含三个部分:文件路径 + 文件名主干 + 文件后缀(可有可无,后缀不是必须有的)

例如: c:\code\test.txt     data.txt

文件名的访问路径

在访问文件名有两种方式:绝对路径相对路径

  • 相对路径. 表示当前路径   .. 表示上一级路径
  • 绝对路径:复制当前【位置】
  • 特别提醒:【文件的扩展名】一定要勾选上

相对路径

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = fopen(".\\data.txt", "w");
	FILE* pf = fopen(".\\..\\data.txt", "w");
	FILE* pf = fopen(".\\..\\..\\data.txt", "w");

	FILE* pf = fopen("\\data.txt", "w");
	FILE* pf = fopen("..\\..\\data.txt", "w");
	FILE* pf = fopen("..\\..\\data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	//关闭文件
	fclose(pf);
	//关闭失败
	if (pf == -1)
	{
		perror("fclose");
	}
	//关闭成功 0
	else
	{
		pf = NULL;
	}
	return 0;
}

绝对路径

文件类型

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

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

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

文件缓冲区

文件指针

缓冲文件系统中,关键的概念是"文件类型指针",简称"文件指针"。

每个被使用的文件都在内存中开辟了一个相应的【文件信息区】,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个【结构体变量】中的。该结构体类型是有系统声明的,取名【FILE】而且在fopen打开文件的同时,都会返回一个【FILE*的指针变量】指向该文件,也相当于建立了指针和文件的关系。

  • 例如 VS2008编译环境提供的 stdio.h 头文件中有以下的文件类型声明

不同的C编译器的【FILE类型】包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关
心细节。fopen同时也都会返回一个【FILE*的指针变量】指向该文件,一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。 

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

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

  • 首先, 在打开fopen每个文件都在内存中开辟了一个相应的【文件信息区】
  • 其次,同时fopen会返回【文件信息区】的起始地址,请用【PILE类型的指针pf】接收

 

文件的打开与关闭

把大象装进冰箱需要几步,第一 打开冰箱门,第二把大象塞进去,第三 关上冰箱门。同理文件在进行读写操作之前先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

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

fopen

fopen - C++ Reference (cplusplus.com)

FILE * fopen ( const char * filename, const char * mode );
  • 头文件#include<stdio.h>
  • fopen参数filename 是char类型的指针,是文件名。(由const修饰防止被修改)
  • fopen参数mode 是char类型的指针,指打开方式。
  • fopen的返回值是FILEl类型的指针,成功,返回的是文件信息区的起始地址。 失败,返回一个空指针。(所以这里一定要注意需要判断


 fclose

fclose - C++ Reference (cplusplus.com)

int fclose ( FILE * stream );
  • 头文件#include<stdio.h>
  • fclose的参数是stream是FILE类型的指针,指文件信息区的起始地址
  • fclose返回值是整型int。如果成功,返回0;如果失败,返回-。(失败需要找原因,成功需要将指针赋值为NULL,防止野指针)


打开方式如下

站在文件的角度,从文件里读取到屏幕,或者从键盘上写东西到文件。 

       文件使用方式    含义                                                                            如果指定文件不存在

  • “r” (只读)     为了输入数据,打开一个已经存在的文本文件            出错
  • “w” (只写)    为了输出数据,打开一个文本文件                              建立一个新的文件
  • “a” (追加)     向文本文件尾添加数据                                               出错
  • “rb”(只读)     为了输入数据,打开一个二进制文件                         出错
  • “wb”(只写)    为了输出数据,打开一个二进制文件                         建立一个新的文件
  • “ab”(追加)    向一个二进制文件尾添加数据                                    出错
  • “r+”(读写)     为了读和写,打开一个文本文件                                出错
  • “w+”(读写)    为了读和写,建议一个新的文件                                建立一个新的文件
  • “a+”(读写)     打开一个文件,在文件尾进行读写                            建立一个新的文件
  • “rb+”(读写)    为了读和写打开一个二进制文件                               出错
  • “wb+”(读写)   为了读和写,新建一个新的二进制文件                    建立一个新的文件
  • “ab+”(读写)    打开一个二进制文件,在文件尾进行读和写             建立一个新的文件 

#include<stdio.h>
int main()
{
	FILE* pf;
	//打开文件
	pf = fopen("data.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	//关闭文件
	fclose(pf);
	//关闭失败
	if (pf == -1)
	{
		perror("fclose");
	}
	//关闭成功 0
	else
	{
		pf = NULL;
	}
	return 0;
}

r

还有一些打开方式的使用大家自己下去动手磋磨搓摩!! 

✔✔✔✔✔最后,感谢大家的阅读,若有错误和不足,欢迎指正!希望自己11月12月的考试全部pass!!pass!!

代码------→【gitee:唐棣棣 (TSQXG) - Gitee.com】

联系------→【邮箱:2784139418@qq.com】

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

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

相关文章

什么是无人直播呢?

无人直播是指通过技术手段实现直播间不停播&#xff0c;从而无需主播真人出镜参与直播。这种直播方式通常需要使用一些特定的软件或工具&#xff0c;例如虚拟背景软件等。 无人直播通常用于一些商业目的&#xff0c;如广告宣传、产品销售等。 通过无人直播&#xff0c;商家可…

2023年中国在线问诊行业发展历程及趋势分析:线上医疗将朝服务多样化、智慧化发展[图]

在线问诊是指通过开设线上义诊等通道进行诊疗的活动&#xff0c;主要作用是可防止线下就诊造成交叉感染。在线问诊平衡医疗资源供给&#xff0c;但问诊顺利开展的前提是可以提供专业的诊断或医疗建议。线上问诊病人很难甄别医生的资质&#xff0c;所以只能作基础性诊断参考。 …

ssm+vue的培训学校教学管理平台(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的培训学校教学管理平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

keepalived+nginx实现高可用

1.安装keepalived、nginx yum install keepalived –y//centos默认无nginx源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmyum install -y nginx2.修改keepalived配置文件&#xff08;/etc/keepalived/keepalived.c…

代码随想录算法训练营第六十二、六十三天 | 单调栈 part 2 | 503.下一个更大元素II 、42. 接雨水、84.柱状图中最大的矩形

目录 503.下一个更大元素II思路代码 42. 接雨水思路一 双指针思路二 单调栈代码 84.柱状图中最大的矩形思路一 双指针思路二 单调栈代码 503.下一个更大元素II Leetcode 思路 将数组乘2来遍历即可&#xff0c;就是加长版的每日温度。 但是处理起来会有细节&#xff0c;如果…

Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然

1. Annoy vs Milvus简介 Annoy 和 Milvus 都是用于向量索引和相似度搜索的开源库&#xff0c;它们可以高效地处理大规模的向量数据。 Annoy&#xff08;Approximate Nearest Neighbors Oh Yeah&#xff09;&#xff1a; Annoy 是一种近似最近邻搜索算法&#xff0c;它通过构…

微信小程序服务通知(订阅消息)定时推送消息功能

首先先说项目需求&#xff1a;向预约参观的用户提前一天晚上8点推送消息。小程序端主要用到的API是我是小程序用到的API。以及服务端用到的API&#xff1a;我是服务端用到的API。 1. 开通订阅消息功能 (1)、 首先需要在小程序管理后台开通订阅消息功能。没开通前如下图所示: …

解读提示工程(Prompt Engineering)

提示工程&#xff08;Prompt Engineering&#xff09;&#xff0c;也称为上下文提示&#xff0c;是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务&#xff0c;从回答问题到算术推理乃至各种应用领…

Python爬虫技术

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

只有正规才有机会,CTF/AWD竞赛标准参考书来了

目录 前言 一、内容简介 二、读者对象 三、目录 前言 随着网络安全问题日益凸显&#xff0c;国家对网络安全人才的需求持续增长&#xff0c;其中&#xff0c;网络安全竞赛在国家以及企业的人才培养和选拔中扮演着至关重要的角色。 在数字化时代&#xff0c;企业为了应对日益…

Lua在计算时出现非法值,开启Debugger之后不再触发

1&#xff09;Lua在计算时出现非法值&#xff0c;开启Debugger之后不再触发 2&#xff09;从Gamma空间改为Linear空间会导致性能下降吗 3&#xff09;EXR格式在Unity中如何优化 4&#xff09;安卓游戏启动后提示“应用程序异常” 这是第355篇UWA技术知识分享的推送&#xff0c;…

事务管理 AOP

一、Spring事务管理 1.Transactional//Spring 事务管理 2.事务进阶 1.事务属性-回滚&#xff08;rollbackFor&#xff09; 2.传播属性&#xff08;propagation&#xff09; 1.DeptLog日志对象 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsC…

完整教程:Java+Vue+Websocket实现OSS文件上传进度条功能

引言 文件上传是Web应用开发中常见的需求之一&#xff0c;而实时显示文件上传的进度条可以提升用户体验。本教程将介绍如何使用Java后端和Vue前端实现文件上传进度条功能&#xff0c;借助阿里云的OSS服务进行文件上传。 技术栈 后端&#xff1a;Java、Spring Boot 、WebSock…

开源在线客服系统源码微信小程序

又来啦&#xff01;今天要给大家分享的是一款在线客服微信小程序源码系统&#xff0c;在外面现在的日常生活中&#xff0c;客服是不可或缺的岗位&#xff0c;下面我们一起来看看这款系统的功能介绍吧。下面是部分的代码截图&#xff1a; 在线客服系统源码微信小程序的功能主要包…

多场景通吃,INDEMIND视觉导航方案赋能服务机器人更多可能

打破场景限制&#xff0c;不一样的“斜杠青年”。 随着服务机器人不断进入到商场、超市、写字楼、酒店等新场景&#xff0c;场景的多样化和复杂度也在明显提升&#xff0c;由于场景的独特性&#xff0c;对于机器人的要求也千差万别&#xff0c;这意味机器人需要更强大的适应性…

1.go web之gin框架

Gin框架 一、准备 1.下载依赖 go get -u github.com/gin-gonic/gin2.引入依赖 import "github.com/gin-gonic/gin"3. &#xff08;可选&#xff09;如果使用诸如 http.StatusOK 之类的常量&#xff0c;则需要引入 net/http 包 import "net/http"二、基…

css 星星闪烁加载框

今天带来的是普灵普灵的loader闪烁加载框 效果如下 开源精神给我们带来了源码 ,源码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

LangChain的发展史

LangChain 发展史 LangChain 的作者是 Harrison Chase&#xff0c;最初是于 2022 年 10 月开源的一个项目&#xff0c;在 GitHub 上获得大量关注之后迅速转变为一家初创公司。2017 年 Harrison Chase 还在哈佛上大学&#xff0c;如今已是硅谷的一家热门初创公司的 CEO&#xf…

绘制X-Bar-S和X-Bar-R图,监测过程,计算CPK过程能力指数

X-Bar-S图和X-Bar-R图是统计质量控制中常用的两种控制图&#xff0c;用于监测过程的稳定性和一致性。它们的主要区别在于如何计算和呈现数据的变化以及所关注的问题类型。 X-Bar-S图&#xff08;平均值与标准偏差图&#xff09;&#xff1a; X-Bar代表样本均值&#xff0c;S代表…

制造业中CRM系统的作用有哪些

CRM系统是企业信息化建设的一部分&#xff0c;制造企业要想在疫情残酷的市场环境中生存下去离不开客户资源&#xff0c;因此我们说制造业CRM系统是当下企业数字化、信息化的关键。制造业CRM系统的作用有哪些?一起来看看吧。 让销售过程更规范 制造业需要CRM系统规范化销售流…