初学c语言21(文件操作)

news2025/6/2 6:20:13

一.为什么使用文件

之前我们写的程序的数据都是存储到内存里面的,当程序结束时,内存回收,数据丢失,

再次运行程序时,就看不到上次程序的数据,如果要程序的数据一直保存得使用文件

二.文件

文件一般可以分为俩种:

1.程序文件

包括源程序文件(后缀为 .c)、目标文件(Windows环境下后缀为 .obj)、可执行程序(Windows环境下后缀为 .exe

2.数据文件

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

三.数据在文件中是怎么存储的?

数据在内存是以二进制形式存储,而在文件中:

字符一律按ASCLL码值形式存储

数值型数据既可以以ASCLL码值形式存储,也可以以二进制形式存储

举例:

如10000,以ASCLL码值形式存储到磁盘,在磁盘上占5个字节(一个字符一个字节),以二进制形式存储,占4个字节,图像如下:

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

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

以ASCLL码值形式存储的文件为文本文件

五.流和标准流

1.流

程序的数据要输出到各种设备,也需要从外部设备获取数据,由于设备的不同导致输入输出操作不同,为了方便就有了流的概念,c程序对文件、键盘等进行输入输出操作都是通过流操作的

一般情况下,向流中输入输出数据都是先打开流,在进行操作

2.标准流

之前的scanf函数从键盘输入信息、primtf函数向屏幕输出信息等却没看见打开流,是因为c程序在启动的时候默认打开了三个流:

stdin ---标准输入流,大多数环境下从键盘上输入,scanf就是从标准输入流中读取数据的

stdout ---标准输出流,大多数环境下从屏幕上输出,printf就是将信息输出到标准输出流中

stderr ---标准错误流,大多数环境下从屏幕上输出

六.文件指针

每打开一个文件,系统就会根据文件情况自动创建FILE结构体变量,并填充其中的信息,一般都是通过一个FILE的指针来维护其结构变量,即文件指针,该指针可以找到与它关联的文件

七.文件的打开和关闭

文件在读写前应该打开文件,使用结束后关闭文件,不然会造成内存泄漏,数据丢失等

ANSIC规定使用fopen打开文件,fclose关闭文件

1.fopen

形式:

功能:

打开fileaname指定的文件,同时将文件和一个流进行关联,后续对流的操作是通过函数返回的指针进行维护的(如fputc、fputs等),具体对流(关联的文件)的操作是通过参数mode来指定的

参数:

filename:表示打开文件的名字,可以是相对路径,也可以是绝对路径

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

返回值:

打开文件成功返回一个指向FILE结构体的指针,通过操作流(统一接口)指向文件信息区,关联到此文件

失败时返回NULL,所以每次打开文件都要检查是否打开成功

文件打开方式(mode参数)

模式描述文件存在文件不存在
“  r  ”只读正常打开文件返回NULLL
“ w ”只写(覆盖)清空文件类容创建新文件
" a "追加写入(从末尾)从末尾写入创建新文件
" r+ "读写(从开头)正常打开文件返回NULL
" w+ "读写(覆盖)清空文件类容创建新文件
" a+ "读写(追加)从末尾写入创建新文件
"rb""wb"等二进制模式(加b)同上同上

2.fclose

形式:

功能:

关闭参数steam关联的文件,并取消其关联关系。与该流关联的内部缓冲区解除关联并刷新(将为写入磁盘的输入缓冲区的类容写入,将未读取的输出缓冲区的类容丢弃)所以文件指针会变为野指针,得及时置为NULL

参数:

steam:指向要关闭文件流的FILE结构体的指针

返回值:

关闭成功返回0,否则返回EOF

应用举例:

.  ----表示当前路径

..  ----表示上一级路径

/ ----表示分割目录层级

相对文件举例:data.txt(表示当前路径的data.txt)或(./../data.txt)

绝对路径举例:C:\Users\xxx\Desktop

八.文件的顺序读写

函数名功能适用于
fgetc从输入流读取一个字符所有输入流
fputc向输出流写入一个字符所有输出流
fgets从输入流读取一个字符串所有输入流
fputs向输出流写入一个字符串所有输出流
fscanf从输入流读取带有格式的数据所有输入流
fprintf向输出流写入带有格式的数据所有输出流
fread从输入流读取一块数据文件输入流
fwrite向输出流写入一块数据文件输出流

1.fputc

形式:

功能:

将参数character指定的字符写入到stream指定的输出流里,字符会被写入内部指示器当前指向的位置(如有字符将被覆盖),写入后指示器向前移动一个位置

参数:

character:被写入的字符

steam:指针,指向了输出流

返回值:

写入成功返回写入的字符(int形式的)

失败时返回EOF(通常为-1)

应用:

2.fgetc

形式:

功能:

从参数stream指定的输入流读取字符,读取当前指示器指向的字符后,指示器也会向前移动一个位置

参数:指针,指向了输入流

返回值:

读取成功时返回读取的字符(int类型的)

读取失败或读取到文件末尾时返回EOF

应用:

2.feof和ferror

feof

形式:

功能:

检测stream指针指向的流是否遇到了文件末尾。如果在读取文件到末尾的时候,读取就会停止,这时读取函数就会在对应的流上设置一个文件结束的指示符,这个指示符会被 feof() 检测到,如果检测到指示符就返回非0的值,否则返回0

ferror

形式:

功能:

检测stream指针指向的流是否读/写错误。如果读/写错误,文件读写就会停止,读写函数就会在对应的流上设置一个错误指示符,这个指示符会被ferror检测到,被检测到指示符被设置就会返回非0的值,否则返回0.

应用:

3.fputs

形式:

功能:

将str指向的字符串写入到stream指向的输出流里(不包括文件的控制符\0

参数:

str:指针,指向要写入的字符串(必须以\0结尾)

stream:指针,指向输出流

返回值:

成功时返回非负数

失败时返回EOF

应用:

4.fgets

形式:

功能:

从stream指定的输入流读取字符串,直至读到换行符、文件末尾、指定字符数(包括结尾\0),然后将读取的字符串存储到str指向的空间里

参数:

str:指向字符数组的指针,用来存储读取的字符

num:最大读取字符数(实际最多读取num-1个,每次读取都会在结尾加\0

stream:指针,指向输入流

返回值:

成功时返回str

读取到文件末尾或读取错误时返回NULL

应用:

5.fprinrf

形式:

功能:

将格式化数据输出到stream指定的流里

参数:

stream:指针,指向要写入的文件流里

format:格式化字符串(%d、%f等)

....  :提供与格式化字符串中说明符

返回值:

成功时返回写入字符个数

失败时返回负值

应用:

6.fscanf

形式:

功能:

从stream指定的文件流中读取格式化数据的函数

参数:

stream:指针,指向输入流

.... :可变参数列表,提供存储数据的地址

其他和scanf一样

返回值:

成功时返回成功填充到可变参数列表的项数,但可能少于预期,有如下原因:

格式化字符与数据不匹配

读取发生错误

在读取成功前读到文件末尾或读取错误返回EOF

应用:

7.fwrite

形式:

功能:

将ptr指向的数据块(可控制)写入到stream指向的输出流里(以二进制写入,所以得在使用前已二进制可写方式打开

参数:

ptr:指针,指向要写入的数据块

size:要写入每个数据块的大小(单位字节)

num:要写入数据项的数量

stream:指针,指向了要写入的文件输出流

返回值:

返回写入的项数

应用:

8.fread

形式:

功能:

从stream指定的文件输入流中读取数据块(读取二进制形式文件

参数:

ptr:指针,指向存储读取的数据的空间

size:要读取每个数据块的大小

count:读取数据块的总量

stream:指针,指向要读取数据的文件流

返回值:

读取的项数

应用:

9.sprintf

形式:

功能:

将格式化数据转化为一个字符串

参数:

str:指针,指向存储生成的字符串

返回值:

成功时返回存储的字符数(不包括\0)

失败时返回负值

应用:

10.sscanf

形式:

功能:

从字符串读取格式化数据

参数:

s:指针,指向要读取的字符串

返回值:

成功时返回解析成功并赋值的项数

失败时返回EOF

应用:

九.文件的随机读取

1.fseek

形式:

功能:

调整文件指示器的位置,可以从想读/写的位置读/写

参数:

stream:指针,指向一个流(如文件流)

origin:文件指示器的初始位置,可设置,有以下可能取值:

offset:相对于origin的偏移量

应用:

2.ftell

形式:

功能:

返回文件指示器相对于起始位置的偏移量

应用:

3.rewind

形式:

功能:

是文件指针回到起始位置

十.文件缓冲区

系统会自动在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据先会送到文件缓冲区,装满后才一起送到磁盘上.

所以在读写模式下,写完后再读,可能数据还没输出到文件,导致读不到数据,以下有个函数可以刷新文件缓冲区,能及时读到数据,

fflush

形式:

功能:

强制刷新stream指定流的缓冲区,但对输入流未定义

参数为NULL时刷新所有打开的输出流

返回值:

成功时返回0,失败时返回EOF

证明代码:

#include <stdio.h>
#include <windows.h>
//VS2022 WIN11环境测试
int main()
{
	FILE* pf = fopen("dtat.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒-已经写数据了,打开dtat.txt文件,发现文件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到⽂件(磁盘)
	//注:fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒-此时,再次打开dtat.txt文件,文件有内容了\n");
	Sleep(10000);
	fclose(pf);
	//注:fclose在关闭⽂件的时候,也会刷新缓冲区
	pf = NULL;
	return 0;
}

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

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

相关文章

华为OD机试真题——数据分类(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《数据…

JavaWeb开发基础Servlet生命周期与工作原理

Servlet生命周期 Servlet的生命周期由Servlet容器(如Tomcat、Jetty等)管理&#xff0c;主要包括以下5个阶段&#xff1a; 加载Servlet类 创建Servlet实例 调用init方法 调用service方法 调用destroy方法 加载(Loading)&#xff1a; 当Servlet容器启动或第一次接收到对某个…

三防平板科普:有什么特殊功能?应用在什么场景?

在数字化浪潮席卷全球的今天&#xff0c;智能设备已成为现代工业、应急救援、户外作业等领域的核心工具。然而&#xff0c;常规平板电脑在极端环境下的脆弱性&#xff0c;如高温、粉尘、水浸或撞击&#xff0c;往往成为制约效率与安全的短板。三防平板&#xff08;防水、防尘、…

百度外链生态的优劣解构与优化策略深度研究

本文基于搜索引擎算法演进与外链建设实践&#xff0c;系统剖析百度外链的作用机制与价值模型。通过数据统计、案例分析及算法逆向工程&#xff0c;揭示不同类型外链在权重传递、流量获取、信任背书等维度的差异化表现&#xff0c;提出符合搜索引擎规则的外链建设技术方案&#…

【速写】PPOTrainer样例与错误思考(少量DAPO)

文章目录 序言1 TRL的PPO官方样例分析2 确实可行的PPOTrainer版本3 附录&#xff1a;DeepSeek关于PPOTrainer示例代码的对话记录Round 1&#xff08;给定模型数据集&#xff0c;让它开始写PPO示例&#xff09;Round 2 &#xff08;指出PPOTrainer的参数问题&#xff09;关键问题…

5.26 面经整理 360共有云 golang

select … for update 参考&#xff1a;https://www.cnblogs.com/goloving/p/13590955.html select for update是一种常用的加锁机制&#xff0c;它可以在查询数据的同时对所选的数据行进行锁定&#xff0c;避免其他事务对这些数据行进行修改。 比如涉及到金钱、库存等。一般这…

中国移动咪咕助力第五届全国人工智能大赛“AI+数智创新”专项赛道开展

第五届全国人工智能大赛由鹏城实验室主办&#xff0c;新一代人工智能产业技术创新战略联盟承办&#xff0c;华为、中国移动、鹏城实验室科教基金会等单位协办&#xff0c;广东省人工智能与机器人学会支持。 大赛发布“AI图像编码”、“AI增强视频质量评价”、“AI数智创新”三大…

模具制造业数字化转型:精密模塑,以数字之力铸就制造基石

模具被誉为 “工业之母”&#xff0c;是制造业的重要基石&#xff0c;其精度直接决定了工业产品的质量与性能。在工业制造向高精度、智能化发展的当下&#xff0c;《模具制造业数字化转型&#xff1a;精密模塑&#xff0c;以数字之力铸就制造基石》这一主题&#xff0c;精准点明…

PECVD 生成 SiO₂ 的反应方程式

在PECVD工艺中&#xff0c;沉积氧化硅薄膜以SiH₄基与TEOS基两种工艺路线为主。 IMD Oxide&#xff08;USG&#xff09; 这部分主要沉积未掺杂的SiO₂&#xff0c;也叫USG&#xff08;Undoped Silicate Glass&#xff09;&#xff0c;常用于IMD&#xff08;Inter-Metal Diele…

2024 CKA模拟系统制作 | Step-By-Step | 17、题目搭建-排查故障节点

目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. Kubernetes 节点状态诊断 2. 节点故障修复技能 3. 持久化修复方案 4. SSH 特权操作 三、考点详细讲解 1. 节点状态机制详解 2. 常见故障原因深度分析 3. 永久修复技术方案 四、实验环境搭建步骤…

如何将图像插入 PDF:最佳工具比较

无论您是编辑营销材料、写报告还是改写原来的PDF文件&#xff0c;将图像插入 PDF 都至关重要。幸运的是&#xff0c;有多种在线和离线工具可以简化此任务。在本文中&#xff0c;我们将比较一些常用的 PDF 添加图像工具&#xff0c;并根据您的使用场景推荐最佳解决方案&#xff…

人工智能与机器学习从理论、技术与实践的多维对比

人工智能(Artificial Intelligence, AI)提出“让机器像人类一样思考”的目标,其核心理论围绕符号系统假设展开——认为智能行为可通过逻辑符号系统(如谓词逻辑、产生式规则)建模。 机器学习(Machine Learning, ML)是人工智能的子集,聚焦于通过数据自动改进算法性能的理…

什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程

什么是 WPF 技术&#xff1f;什么是 WPF 样式&#xff1f;下载、安装、配置、基本语法简介教程 摘要 WPF教程、WPF开发、.NET 8 WPF、Visual Studio 2022 WPF、WPF下载、WPF安装、WPF配置、WPF样式、WPF样式详解、XAML语法、XAML基础、MVVM架构、数据绑定、依赖属性、资源字典…

流程自动化引擎:让业务自己奔跑

在当今竞争激烈的商业环境中&#xff0c;企业面临着快速变化的市场需求、日益复杂的业务流程以及不断增长的运营成本。如何优化业务流程、提升效率并降低成本&#xff0c;成为企业持续发展的关键问题。 流程自动化引擎&#xff08;Process Automation Engine&#xff09;作为一…

AI炼丹日志-23 - MCP 自动操作 自动进行联网检索 扩展MCP能力

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

用 Python 模拟雪花飘落效果

用 Python 模拟雪花飘落效果 雪花轻轻飘落&#xff0c;给冬日带来一份浪漫与宁静。本文将带你用一份简单的 Python 脚本&#xff0c;手把手实现「雪花飘落效果」动画。文章深入浅出&#xff0c;零基础也能快速上手&#xff0c;完整代码仅需一个脚本文件即可运行。 目录 前言…

基于定制开发开源AI智能名片S2B2C商城小程序的大零售渗透策略研究

摘要&#xff1a;本文聚焦“一切皆零售”理念下的大零售渗透趋势&#xff0c;提出以定制开发开源AI智能名片S2B2C商城小程序为核心工具的渗透策略。通过分析该小程序在需求感应、场景融合、数据驱动等方面的技术优势&#xff0c;结合零售渗透率提升的关键路径&#xff0c;揭示其…

XPlifeapp:高效打印,便捷生活

在数字化时代&#xff0c;虽然电子设备的使用越来越普遍&#xff0c;但打印的需求依然存在。无论是学生需要打印课表、资料&#xff0c;还是职场人士需要打印名片、报告&#xff0c;一个高效便捷的打印软件都能大大提高工作效率。XPlifeapp就是这样一款超级好用的手机打印软件&…

等保测评-Mysql数据库测评篇

Mysql数据库测评 0x01 前言 "没有网络安全、就没有国家安全" 等保测评是什么&#xff1f; 等保测评&#xff08;网络安全等级保护测评&#xff09;是根据中国《网络安全法》及相关标准&#xff0c;对信息系统安全防护能力进行检测评估的法定流程。其核心依据《信…

02.K8S核心概念

服务的分类 有状态服务&#xff1a;会对本地环境产生依赖&#xff0c;例如需要把数据存储到本地磁盘&#xff0c;如mysql、redis&#xff1b; 无状态服务&#xff1a;不会对本地环境产生任何依赖&#xff0c;例如不会存储数据到本地磁盘&#xff0c;如nginx、apache&#xff…