⽂件操作详解
一 文件操作的引入
1 为什么使⽤⽂件?
为了将数据进⾏持久化的保存,如果我们没有文件我们写的程序的数据其实是存储在电脑的内存中,当我们程序一退出,内存回收,数据就会丢失,等再次运⾏程序,就看不到上次程序的数据。
2 什么是⽂件?
2.1 概念:磁盘(硬盘)上的⽂件是⽂件。
⽂件名包含3部分:⽂件路径+⽂件名主⼲+⽂件后缀例如: c:\code\test.txt为了⽅便起⻅,⽂件标识常被称为⽂件名。
2.3路径的两种形式(相当路径/绝对路径)
3 文件分类(1 从⽂件功能的⻆度来分类:程序⽂件/数据⽂件 2根据数据的组织形式:为⽂本⽂件/⼆进制⽂件)
二 ⽂件的打开和关闭
1 流和标准流(其中标准流在C语⾔程序启动的时候,默认打开)
1.1 流:因为不同的外部设备的输⼊输出操作各不相同,此时为了⽅便程序员对各种设备进⾏⽅便的操作便引出了流,其实,流就是为了⽅便程序员对各种设备读取数据或者输出数据的操作,而抽象出的概念,这里我们可以把流想象成流淌着字符的河。
1.2标准流的引入
在C语言中我们如何对针对⽂件、画⾯、键盘等的数据输⼊输出操作呢?其实C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。那为什么我们使用scanf和printf函数并没有直观的感觉到呢?这时候就要引入标准流。
1.3 标准流
2 ⽂件指针(⽂件类型指针)
2.1 概念:
2.2 创建⼀个FILE*的指针变量
int main()
{
FILE* pf;//⽂件指针变量return 0
}

3 ⽂件的打开和关闭
3.2使用文件的固定步骤
fopen 函数原型:
fclose函数原型:
3.3 文件的打开模式
其中常用的只要几个。
1
三 ⽂件的顺序读写
下面我们来介绍几个顺序读写函数,我们可以利用这几个顺序读写函数在结和文件的打开模式对文件进行操作。
顺序读写函数:
1 fgect函数
1.1 这是一个字符输入函数个,适用于所有输入流。
示例:
这里我们运用"r"只读的方式打开文件,这里我们是进行字符的读取,所以我们应在相应文件中放上内容 再看相应文件中的内容:
再看运行结果:
注意在读取字符时它会从第一个字符的位置开始读取,当每次读取完成后,光标会往后移动一位,利用这一特性,再利用循环进行读取,这样我们就可以达到像读取字符串一样,当我们想读取的个数比读取文件中的个数多会发生什么呢?这时候多余的会打印出错误信息(这里我就不举例了,感兴趣的可以自己试一试。特别注意fgetc在遇到空格时会选择跳过
1.2 这个函数适用于使用输入流,那意味着对于标准流也有用。
这里我们先输入一个字符便可以打印出相应的字符。
2 fputc函数
2.1 这是一个字符输出函数,适用于所有输出流。
示例:
现在我们打开文件观察其运行结果:
这里我们发现文件中已经有了相应的字符,但是我们·发现文件中的字符全部都在一行这是为什么呢?其实fputc函数也能识别”\0"只要其识别到”\0"结束标识符时才会换行。那这里有一个问题很值得我们思考,上面的fgect函数适用于使用输入流,是一个字符输入函数,而fputc函数这个函数适用于使用输出流,是一个字符输出函数。那么这两个函数是否呢结和使用呢?
将fgect函数和fputc函数结和使用:
这里我们发现将fgect函数和fputc函数结和使用结果是不行的,因为"w"模式是写入模式,会清空文件内容,在写入之后,在进行读取操作不会得到任何内容。
2.2 这个函数适用于使用输出流,那意味着对于标准流也有用。
3 fgets函数
这是一个文本行输入函数,适用于所有输入流。(文本行即能对一行操作)
这个函数有三个参数分别是存放读取字符串的地址、读取的字符个数、文件指针。
示例:
我们看一看文件中都内容:
4 fputs函数
这是一个文本行输出函数,适用于所有输出流。(文本行即能对一行操作)
这个函数有两个参数分别是:字符串地址和文件指针
示例1:
结果:
示例2:

5 fscanf函数
这是一个格式化输⼊函数函数,适用于所有输入流(格式化即特定的格式可以包含多个类型)。
我们发现这个函数的原型有些神奇,他的参数里面居然有个省略号!也就是说,它支持传入的参数个数是无限制的!要想熟练使用fscanf函数就得仿造scanf函数它们只相差一个参数fscanf函数比scanf函数多了一个文件指针。
示例:
文件内容:
运行结果:
6 fprintf函数
这是一个格式化输出函数,适用于所有输出流(格式化即特定的格式可以包含多个类型)。
它的使用可以类比于printf函数比printf函数多了一个参数( 文件指针)
示例:
7 fread函数
这是一个⼆进制输⼊函数,适用于文件输入流。
这个函数传入的参数就相对来说复杂了一些:分别是存放字符串的地址、数据的字节大小、数据的数量、文件指针。
示例:
8 fwrite函数
这是一个⼆进制输出函数,适用于文件输出流。
示例:
四 ⽂件的随机读写
1 fseek函数
int fseek ( FILE * stream, long int offset, int origin );
第一个参数就是文件指针,没什么好说的,通过上前面的学习我们发现这种文件操作函数基本都要输入文件指针。
第二个参数是偏移量参数,可以为正数,也可以为负数。
第三个参数是起始位置
- 文件头
SEEK_SET
0- 当前位置
SEEK_CUR
1文件尾
SEEK_END
2
2 ftell函数
这个函数可以返回文件指针相对于起始位置的偏移量
long int ftell ( FILE * stream );
我们直接传文件指针就行,他会返回光标位置相较于文本最开始的偏移量
3 rewind函数
这个函数可以让文件指针的位置回到文件的起始位置。
void rewind ( FILE * stream );
示例:
五 ⽂件读取结束的判定
1⽂本⽂件读取是否结束/⼆进制⽂件的读取结束判断
我们都知道,EOF是文件结束的标志,那么feof呢?
判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )•fgetc 判断是否为 EOF .•fgets 判断返回值是否为 NULL .
判断返回值是否⼩于实际要读的个数。•fread判断返回值是否⼩于实际要读的个数。
2 ⽂本⽂件的例⼦:
3 ⼆进制⽂件的例⼦:
运行结果:
六 ⽂件缓冲区
缓冲⽂件系统是指系统⾃动地在内存中为程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。在C语言文件操作时,其实我们读取文件内容和输入内容到文件时,并不是直接对其进行操作的,而是通过文件缓冲区操作。那为什么会有⽂件缓冲区呢?其目的是为了提高编程效率假如没有⽂件缓冲区,这是我们要对一个字符串操作时如果没有⽂件缓冲区,我们就要不断对每个字符重复的进行操作,如果有了⽂件缓冲区我们把像输入的字符一个一个先放入缓冲区,等到积攒到了一定的数量,超过缓冲区范围,再把缓冲区的字符一次性放到硬盘中,这样就能减少系统的运行压力。记住缓冲区的⼤⼩根据C编译系统决定的。
本篇文章就到此结束,欢迎大家订阅我的专栏,欢迎大家指正,希望有所能帮到读者更好了解⽂件操作相关知识 ,觉得有帮助的还请三联支持一下~后续会不断更新C/C++相关知识,我们下期再见。
相关文章:

⽂件操作详解
⽬录 一 文件操作的引入 1 为什么使⽤⽂件? 2 什么是⽂件? 3 文件分类(1 从⽂件功能的⻆度来分类:程序⽂件/数据⽂件 2根据数据的组织形式:为⽂本⽂件/⼆进制⽂件) 二 ⽂件的打开和关闭 1 …...

双高(高比例新能源发电和高比例电力电子设备)系统宽频振荡研究现状
1 为什么会形成双高电力系统 (1)新能源发电比例增加 双碳计划,新能源革命,可再生能源逐步代替传统化石能源,未来新能源发电将成为最终能源需求的主要来源。 (2)电力电子设备数量增加 为了实…...

TorchMoji使用教程/环境配置(2024)
TorchMoji使用教程/环境配置(2024) TorchMoji简介 这是一个基于pytorch库,用于将文本分类成不同的多种emoji表情的库,适用于文本的情感分析 配置流程 从Anaconda官网根据提示安装conda git拉取TorchMoji git clone https://gi…...

使用 Python 中的 TripoSR 根据图像创建 3D 对象
使用 Python 中的 TripoSR 根据图像创建 3D 对象 1. 效果图2. 步骤图像到 3D 对象设置环境导入必要的库设置设备创建计时器实用程序上传并准备图像处理输入图像生成 3D 模型并渲染下载.stl 文件展示结果3. 源码4. 遇到的问题及解决参考这篇博客将引导如何使用Python 及 TripoSR…...
Spring 框架中AOP(面向切面编程)和 IoC(控制反转)
在 Spring 框架中,AOP(面向切面编程)和 IoC(控制反转)是两个核心概念,它们分别负责不同的功能。下面我将通过通俗易懂的解释来帮助你理解这两个概念。 IoC(控制反转) IoC 是 Inver…...
电机瞬态分析基础(7):坐标变换(3)αβ0变换,dq0变换
1. 三相静止坐标系与两相静止坐标系的坐标变换―αβ0坐标变换 若上述x、y坐标系在空间静止不动,且x轴与A轴重合,即,如图1所示,则为两相静止坐标系,常称为坐标系,考虑到零轴分量,也称为αβ0坐标…...

Open3D (C++) 生成任意3D椭圆点云
目录 一、算法原理1、几何参数2、数学公式二、代码实现三、结果展示一、算法原理 1、几何参数 在三维空间中,椭圆由以下参数定义: 椭圆中心点 c = ( x 0 , y 0 , z...

5.利用Pandas以及Numpy进行数据清洗
1、缺失值处理 import pandas as pd import numpy as np#创建一张7行5列带有缺失值的表,表中的数据0-100随机生成,索引是python1. df pd.DataFrame(datanp.random.randint(0,100,size(7,5)), index [i for i in pythonl])df.iloc[2,3] Nonedf.iloc[4…...
@Bean注解详细介绍以及应用
目录 一、概念二、应用(一)代码示例1、首先创建一个简单的 Java 类User2、然后创建一个配置类AppConfig3、在其他组件中使用Bean创建的 bean4、通过 Spring 的ApplicationContext来获取UserService并调用其方法 (二)bean的方法名详…...

基于SpringBoot的预制菜销售系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

从 EXCEL 小白到 EXCEL 高手的成长之路
在职场与日常生活中,Excel 作为一款强大的数据处理与分析工具,扮演着不可或缺的角色。无论是初学者还是资深职场人士,掌握 Excel 技能都能极大地提高工作效率。那么,从一个 Excel 小白蜕变成为 Excel 高手,究竟需要多久…...

【纸飞机串口调试工具】数值显示器及四则运算
目录 纸飞机串口工具介绍软件下载适用场合功能介绍 纸飞机串口工具介绍 纸飞机一款性能强劲且专业的串口/网络/HID调试助手,具有多窗口绘图、关键字高亮、数据分窗和数据过滤等众多功能,可以极大的方便嵌入式开发人员的调试过程。本文介绍数值显示器的四…...

浅谈volatile
volatile有三个特性: (1)可见性 (2)不保证原子性 (3)禁止指令重排 下面我们一一介绍 (一)可见性 volatile的可见性是说共享变量只要修改,就可以被其他线…...

Python3 爬虫 Scrapy的使用
安装完成Scrapy以后,可以使用Scrapy自带的命令来创建一个工程模板。 一、创建项目 使用Scrapy创建工程的命令为: scrapy startproject <工程名> 例如,创建一个抓取百度的Scrapy项目,可以将命令写为: scrapy s…...

多线程篇-4--重点概念1(volatile,Synchronized,内存屏障,MESI协议)
一、volatile (1)、简述 volatile是java提供的一个关键字,英文意思为不稳定的。 可以保障被声明对象的可见性和一定程度上的有序性,但不能保证操作的原子性。 当一个变量被声明为volatile时,意味着该变量的值会直接从…...

本地学习axios源码-如何在本地打印axios里面的信息
1. 下载axios到本地 git clone https://github.com/axios/axios.git 2. 下载react项目, 用vite按照提示命令配置一下vite react ts项目 npm create vite my-vue-app --template react 3. 下载koa, 搭建一个axios请求地址的服务端 a.初始化package.json mkdir koa-server…...
1、SpringBoo中Mybatis多数据源动态切换
我们以一个实例来详细说明一下如何在SpringBoot中动态切换MyBatis的数据源。 一、需求 1、用户可以界面新增数据源相关信息,提交后,保存到数据库 2、保存后的数据源需要动态生效,并且可以由用户动态切换选择使用哪个数据源 3、数据库保存了多个数据源的相关记录后,要求…...
【浏览器】缓存与存储
我是目录 浏览器缓存为什么需要浏览器缓存?对浏览器的缓存机制的理解协商缓存和强缓存的区别强缓存协商缓存 点击刷新按钮或者按 F5、按 CtrlF5 (强制刷新)、地址栏回车有什么区别? 浏览器本地存储前端储存的方式有哪些࿱…...

积鼎科技携手西北工业大学动力与能源学院共建复杂多相流仿真联合实验室
11月26日,复杂多相流仿真联合实验室揭牌仪式及技术研讨活动在西北工业大学动力与能源学院成功举办。复杂多相流仿真联合实验室是由西北工业大学动力与能源学院牵头,携手上海积鼎信息科技有限公司与三航铸剑(西安)科技发展有限公司…...

5. langgraph实现高级RAG (Adaptive RAG)
1. 数据准备 from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import WebBaseLoader from langchain_community.vectorstores import Chromaurls ["https://lilianweng.github.io/posts/2023-06-23-age…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...