文件操作相关的精讲
目录:
思维导图
一. 文件定义
二. 文件的打开和关闭
三. 文件的顺序读写操作
四. 文件的随机读写操作
五. 文本文件和二进制文件
六. 文件读取结束的判断
七.文件缓冲区
思维导图:

一. 文件定义
1.文件定义
C语言中,文件是指一组相关数据的集合。
不知道大家是否注意到这样的问题:当我们执行一个程序的时候,数据并不会消失,但是当我们程序退出,那么数据就会消失,这是为啥???

当我们运行程序的时候,数据都是加载到内存上的,这样的运行效率会更高。一旦程序退出,内存上的数据就消失了。
当我们把数据存储在磁盘上,我们可以随时随地查看数据,不会存在数据的消失问题。
文件的作用:把数据进行永久化的保存,即使程序退出,数据也是不会消失。
2. 文件分类
2.1 程序文件
包括源程序文件(后缀:.c),目标文件(Windows后缀:.obj),可执行程序(后缀:.exe)
2.2数据文件
数据文件是程序运行时读,写的数据
3.对程序与文件之间关系的理解

二. 文件的打开和关闭
1. 文件指针
在C中:定义一个FILE* (文件指针) 类型的指针,就可以对文件进行各种读和写的操作。
每一个被指定使用的文件都会有一个对应的文件信息区,用来存放当前文件的相关信息(大小,文件位置,文件状态……),这些信息都是通过一个FILE* 类型指针进行维护的。
2文件的基本操作

fopen() 第一个参数:要操作文件的名字
fopen() 函数返回值:

打开文件的方式:



三. 文件的顺序读写操作
1. 相关的函数使用介绍

2. 对文件的使用操作
1)fgetc() fputc()

fgetc() 一旦读取失败或者是遇到文件末尾会返回一个EOF

对于fputc()函数的使用和fgetc()函数使用以及函数操作失败返回值 是一样的。
这两个函数都是对字符进行一个一个操作的
使用栗子:


2)fgets() 和 fputs()




注意:
fgets() 最多只能读取num-1个字符,遇到换行符结束读取,
fgets() fputs()只能是针对性的一行字符串进行处理
每一次打开文件的时候FILE* pf 指针都会默认指向文件内容的起始位置
3)fscanf() fprintf()

fscanf()功能:从流里面读取格式化的数据

fprintf()功能:把格式化的数据写入流里面
使用例子


4)sscanf() sprintf()

sscanf() 函数功能:从字符串里面把数据转成指定的格式化

sprintf() 函数功能: 把指定格式化的数据转换成字符串
使用例子:


5)fread() fwrite()

fread() 函数功能:从流里面读取数据以二进制读的方式(“rb”)
参数介绍:
ptr:把读取之后的数据存放起来
count: 要读取的数据个数
size: 读取每一个数据大小,单位字节
stream:数据流
fread() fwrite()函数参数基本一样;
fwrite() 函数功能:把数据写进一个流里面以二进制写的方式(“wb”)
前者功能是读取一个二进制文件,后者是对一个二进制文件进行写入数据。只不过当我们打开写入之后的这个二进制文件咱是看不懂的。


四. 文件的随机读写操作
不知道大家是否注意到这样一个问题:咱们每一次打开指定的文件的时候,文件指针都会默认指向文件内容的起始位置;如果想要每次打开文件的时候在任意一行的某个位置指定呢???

1. fseek()


fseek() 函数功能:根据文件指针的位置和偏移量重新定义指针的指向位置
函数返回值:成功的话,返回数值0;否则返回非0的数值
参数介绍:
stream:文件指针
offset: 偏移量(非正数即负数)
origin:指定文件指针的位置

2. ftell()


ftell() 函数功能:返回当前指针与起始位置的偏移量。
此函数返回值:也是返回当前指针所在位置距离起始位置的偏移量
3.rewiind()

rewind() 函数功能:让FILE* 类型的指针重新回到文件的起始位置
关于以上3个函数综合应用:
int main()
{int arr[10] = { 0 };FILE* pf = fopen("test.txt", "r");if (pf == NULL){perror("fopen");return 1;}int ch = fgetc(pf);printf("%c\n", ch);//afseek(pf, 5, SEEK_CUR);//注意是从b这个位置偏移5个位置,指向gch = fgetc(pf);printf("%c\n", ch);//gprintf("当前指针距离起始位置的偏移量:%d\n", ftell(pf));//pf每次使用完会自动指向下一个数据的位置,此时指向hrewind(pf);//此时指针从当前位置重新回到文件的起始位置char ret[100] = "xxxxxxx";fgets(ret, 10, pf); //从pf所在位置开始最多读取9个字符放到ret这个数组printf("%s\n",ret);fclose(pf);pf = NULL;return 0;
}
运行结果:
五. 文本文件和二进制文件
根据数据输出的组织形式,数据文件分为文本文件和二进制文件。
数据在内存里面以二进制形式存储,当数据输出的时候不加以任何形式的转换,此时文件称之为二进制文件
但是当数据 输出的时候要求以ASCII码的形式输出到外存(硬盘),此时的文件称之为文本文件。
数据是如何存储在内存里的???

举个例子:数据100000 以字符形式存储和以数值形式存储所占大小是不一样的
数值类型存储占4个字节:
int main()
{int a = 100000;FILE* pf = fopen("test.txt", "wb");if (pf == NULL){perror("fopen()");return -1;}fwrite(&a, sizeof(int), 1, pf);//以数值型存储100000fclose(pf);pf = NULL;return 0;
}
此文件是以二进制编辑方式打开的
关于如何以二进制编辑打方式开指定文件见下:
分析:

100000以ASCII 形式存储占6个字节:

注意:

关于数据大小(单位字节)并不是由数据是以什么形式存储在内存里决定的。
六. 文件读取结束的判断
1. feof()
对于此函数相信有很多老铁会被误导吧!
feof()函数返回值是不能用来判断文件是否读取结束滴!
feof()函数功能:
当用户自己明确知道文件已经读取结束了,调用此函数判读文件是因为读取失败而结束还是遇到文件末尾正常结束的。
1.1
对于文本文件是否读取结束滴返回值的判断应该调用函数fgetc() :对应返回值EOF
fgets()返回值:NULL
1.2
对二进制文件的读取结束判断返回值是否小于实际读取的个数即可
比如:fread() 函数
2. 使用
#include <stdlib.h>int main(){int c; FILE* fp = fopen("test.txt", "r"); //读的方式打开此文件if (fp == NULL) {perror("fopen()");return -1;}while ((c = fgetc(fp)) != EOF) // 标准C I/O读取文件循环{putchar(c);}//判断是读取结束原因//fgetc() 当读取失败的时候或者遇到文件结束的时候,都会返回EOFif (ferror(fp)) // ferror() 判断是否异常结束读取的puts("I/O error when reading");else if (feof(fp))// feof() 明确知道读取结束,判断是否遇到文件末尾结束读取puts("End of file reached successfully");fclose(fp);fp = NULL;return 0;}
七.文件缓冲区
不知道各位是否想过这样一个问题:当我们从文件读取数据的时候,这些数据是瞬间就被成功读取了还是说系统有一定的处理机制呢???
对于这个问题,涉及到文件缓冲区的知识点:
当我们从文件读取数据的时候,这些数据并不是瞬间就被读取了,而是先进入一个内存缓冲区,等到这个缓冲区达到一定条件(比如说:缓冲区满了;又或者是数据读取已经结束了等等),这些数据就会被送到程序数据区;
对于写入数据是一样的道理
相关文章:
文件操作相关的精讲
目录: 思维导图 一. 文件定义 二. 文件的打开和关闭 三. 文件的顺序读写操作 四. 文件的随机读写操作 五. 文本文件和二进制文件 六. 文件读取结束的判断 七.文件缓冲区 思维导图: 一. 文件定义 1.文件定义 C语言中,文件是指一组相…...
05 循环神经网络
目录 1. 基本概念 2. 简单循环网络 2.1 简单循环网络 2.2 长程依赖问题 3. 循环神经网络的模式与参数学习 3.1 循环神经网络的模式 3.2 参数学习 4. 基于门控的循环神经网络 4.1 长短期记忆网络 4.2 LSTM网络的变体网络 4.3 门控循环单元网络 5. 深层循环神经网络…...
C#初级——条件判断语句、循环语句和运算符
条件判断语句 简单的条件判断语句,if()里面进行条件判断,如果条件判断正确就执行语句块1,如果不符合就执行语句块2。 if (条件判断) { 语句块1 } else { 语句块2 } int age 18;if (age < 18){Console.WriteLine("未…...
Laravel路由模型绑定:简化依赖注入的艺术
Laravel路由模型绑定:简化依赖注入的艺术 引言 在现代Web应用开发中,Laravel框架以其优雅和简洁的代码而闻名。Laravel的路由模型绑定(Route Model Binding)是框架提供的一项强大功能,它允许开发者在路由处理中自动注…...
【vue前端项目实战案例】之Vue仿饿了么App
本文将介绍一款仿“饿了么”商家页面的App。该案例是基于 Vue2.0 Vue Router webpack ES6 等技术栈实现的一款外卖类App,适合初学者进行学习。 项目源码下载链接在文章末尾 1 项目概述 该项目是一款仿“饿了么”商家页面的外卖类App,主要有以下功能…...
冷热分离——Java全栈知识(36)
之前在面试的时候有老师问: 我看你使用了水平分表,但是如果有些 1%的数据占了访问量的 90%,而剩下 99%的数据只占了访问量的 10%。这种情况怎么处理。 1 、冷热分离 1.1、什么是冷热分离 冷热分离指的是在处理数据时将数据库分为冷库和热库…...
了解Selenium中的WebElement
Selenium中到处都使用WebElement来执行各种操作。什么是WebElement?这篇文章将详细讨论WebElement。 Selenium中的WebElement是一个表示网站HTML元素的Java接口。HTML元素包含一个开始标记和一个结束标记,内容位于这两个标记之间。 HTML元素的重命名 …...
OpenCV facedetect 人脸检测官方示例项目配置
运行程序。该程序会自动打开摄像头,识别并定位摄像头前的人脸以及眼睛部位。 输入q或者Q,退出程序。 或进行文本中所包含的图片路径 或 单个图片进行检测,自行修改代码即可 配置环境项目,debug 解决error C4996: ‘fopen’: This…...
自定义Laravel Artisan风格:打造个性化命令行体验
自定义Laravel Artisan风格:打造个性化命令行体验 引言 Laravel的Artisan命令行工具是开发过程中不可或缺的一部分,它提供了一个强大的接口来执行各种开发、维护、测试等任务。除了执行命令,Artisan还允许开发者自定义命令行输出的风格&…...
CTF之网站被黑
简单看一下网页和源码没发现什么明显漏洞 那就扫描一下目录 发现了/shell.php文件,访问一下,发现是一个后台管理登录页面 别无他法只能爆破喽,爆破后发现密码是hack flag{25891d9e9d377f006eda3ca7d4c34c4d}...
Electron学习笔记(一)基础环境
目录 前言 基础环境准备 安装 Node.js 配置项目文件 通过代理服务安装 通过国内仓库安装 一些常见问题: 前言 一个新手学习Electron的笔记,记录为主,仅供参考。 其他文章见专栏目录。 基础环境准备 开发之前先将基础环境搭建好。 …...
【C语言】栈的实现(数据结构)
前言: 还是举一个生活中的例子,大家都玩过积木,当我们把积木叠起来的时候,如果要拿到最底部的积木,我们必须从顶端一个一个打出,最后才能拿到底部的积木,也就是后进先出(先进后出&a…...
前端三大主流框架对比
在现代前端开发中,React、Vue和Angular是三大流行的框架/库。它们各自有独特的优缺点,适用于不同的开发需求和项目规模。下面是对这三者的详细比较: 一、 React 简介: 由Facebook开发和维护,是一个用于构建用户界面…...
AOP~面向切面编程介绍
AOP基础 概述 AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),面向特定方法的编程。 动态代理是面向切面编程最主流的实现。 SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,…...
Android SurfaceFlinger——GraphicBuffer的提交(三十三)
在 SurfaceFlinger 中,我们 dequeueBuffer 和 queueBuffer 是 Surface 控制接口中非常重要的两个函数,分别用于从 Surface 的 BufferQueue 中取出缓冲区和向 BufferQueue 提交(队列)缓冲区。这两个函数在生产者和消费者模型中扮演着核心角色,确保了图像数据的高效和有序传…...
创维汽车滁州永通体验中心开业仪式暨超充车型区域上市会圆满成功
2024年7月20日,创维汽车滁州永通体验中心盛大开业,当日,创维汽车市场部经理周世鹏、安徽大区总监王大明等领导参加本次开业盛典,共同见证创维汽车滁州永通体验中心成功落地。 2021年,新能源乘用车高速发展,…...
【PHP】系统的登录和注册
一、为什么要学习系统的登录和注册 系统的登录和注册可能存在多种漏洞,这些漏洞可能被恶意攻击者利用,从而对用户的安全和隐私构成威胁。通过学习系统的登录和注册理解整个登录和注册的逻辑方便后续更好站在开发的角度思考问题发现漏洞。以下是一些常见…...
2024.7.29 刷题总结
2024.7.29 **每日一题** 682.棒球比赛,这道题是一道简单的模拟题,用栈模拟题中的四个操作就可以了,操作一是将x加到列表末尾,操作二是将列表的后两项之和加到列表末尾,操作三是把列表最后一项的两倍加到列表末尾&#…...
WebSocket程序设计
协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中,在 WebSocket API 中,浏览器和服务器只…...
ES(ElasticSearch)倒排索引
目录 正排与倒排索引 1.正排索引 作用: 优点: 缺点: 2.倒排索引 原理: 倒排索引的构建流程: 倒排索引的搜索流程: 优点: 缺点: 3. 应用场景 倒排索引中有几个非常重要的概念…...
告别黄牛票:用DamaiHelper脚本轻松抢到大麦网演唱会门票
告别黄牛票:用DamaiHelper脚本轻松抢到大麦网演唱会门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪的演唱会门票而烦恼吗?面对秒光的票源和黄牛的高…...
3步突破格式限制:网易云音乐NCM文件转换终极指南
3步突破格式限制:网易云音乐NCM文件转换终极指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM加密文件无法在其他设备播放而烦恼吗?ncmdump开源工具为你提供完美的NCM格式转换解…...
数据决定上限,准备决定成败:DeepSeek同源训练数据预处理全链路拆解,错过这3个关键阈值=白训2000卡时
更多请点击: https://codechina.net 第一章:数据决定上限,准备决定成败:DeepSeek同源训练数据预处理全链路总览 高质量大模型的基石并非仅在于参数规模或算力堆叠,而深植于训练数据的纯净度、多样性与结构化程度。De…...
Node.js 项目如何集成 Taotoken 实现稳定的大模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Node.js 项目如何集成 Taotoken 实现稳定的大模型调用 对于 Node.js 后端服务开发者而言,在项目中引入大模型能力正变得…...
YOLOv11农田烟草叶片病害目标检测数据集-470张-tobacco-plant-1
YOLOv11农田烟草叶片病害目标检测数据集 📊 数据集基本信息 目标类别: [‘Black shank’, ‘Healthy Leaf’, ‘Tobacco leaf curl disease -TLCD-’, ‘Tobacco mosaic virus -TMV-’, ‘brown sport’, ‘frogeye leaf spot’]中文类别:[‘…...
【肾结石检测】图像处理技术检测超声图像中的肾结石【含Matlab源码 15553期】含报告
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
【稻米计数】形态学稻米计数【含Matlab源码 15562期】
💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...
使用 Node.js 和 Taotoken 为博客网站快速搭建一个智能内容摘要生成接口
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Node.js 和 Taotoken 为博客网站快速搭建一个智能内容摘要生成接口 对于个人博客站长而言,为篇幅较长的文章提供一…...
终极指南:如何快速解密QQ音乐加密音频文件
终极指南:如何快速解密QQ音乐加密音频文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经下载了QQ音乐的歌曲,却发现只能在特定播放器里…...
JVM调优实战:从频繁Full GC到毫秒级响应的真实踩坑记录
前言 去年双十一大促前,我们的订单系统突然开始出现间歇性卡顿。起初以为是数据库慢查询,直到看了GC日志才发现问题远比想象中复杂。这篇文章记录的是我们从一个频繁Full GC、停顿时间超过3秒的系统,优化到平均停顿小于50ms的完整过程。 真…...

