【C语言复习】C语言中的文件操作
C语言中的文件操作
- 写在前面
- 文件操作
- 什么是文件
- 文件的分类
- 文件名
- 文件的操作
- 文件指针
- 文件的打开和关闭
- 文件的顺序读写
- 文件的随机读写
- fseek
- ftell
- rewind
- feof
写在前面
文件操作在C语言部分只是属于了解内容,但是因为它可能会应用在项目中,所以我把它单独写成一个小节。
文件操作
什么是文件
文件的分类
文件一般分为程序文件和数据文件。
- 程序文件是包括源程序文件(后缀名.c),目标文件(windows环境下后缀名为.obj),可执行程序(windows环境下后缀名为.exe)
- 数据文件是程序运行过程中需要从中读取数据的文件,或者程序运行中输出内容的文件
本小节文件操作,指的就是数据文件的操作。
根据数据在文件中的组织形式,数据文件又分为文本文件或者二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出,就是二进制文件。如果要求在外存上以ASCII码的形式存储,就需要在存储前进行转换。以ASCII字符的形式存储的文件就是文本文件。
一个数据在内存中是怎么存储的呢? 字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而 二进制形式输出,则在磁盘上只占4个字节(VS2013测试)。
文件名
文件名是唯一的文件标识,包含三部分:文件路径,文件名主干,文件名后缀。
文件的操作
文件指针
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。
不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。 每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,
使用者不必关心细节。 一般都是通过一个FILE的指针来维护这个FILE结构的变量,使用起来更方便。
//创建FILE*指针变量
FILE* pf;
通过文件指针就可以找到与他相关联的文件。
文件的打开和关闭
文件在读写之前应该先打开,从而打开文件流,建立一个FILE类型的结构体,读写后应该关闭它。
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不关闭,就不会刷新C语言内部的缓冲区,从而导致读写出现问题。
//打开
FILE* fopen(const char* filename, const char* mode);
//关闭
int fclose(FILE* stream);
| 文件打开mode | 意义 | 如果指定文件不存在 |
|---|---|---|
| “r” (只读) | 为了输入数据,打开一个已经存在的文本文件(输入指的是 文件 -> 内存) | 出错 |
| “w” (只写) | 为了输出数据,打开一个文本文件(输出指的是 文件 <- 内存) | 建立新文件 |
| “a” (追加) | 文件尾部添加数据 | 建立新文件 |
| “rb” (只读) | 二进制的r | 出错 |
| “wb” (只写) | 二进制的w | 建立新文件 |
| “ab” (追加) | 二进制的a | 出错 |
| “r+” (读写) | 为了读和写,打开一个文本文件 | 出错 |
| “w+” (读写) | 为了读和写,建立一个新文件 | 新建 |
| “a+” (读写) | 打开一个文件,在文件尾部进行读写 | 新建 |
| “rb+”(读写) | 为了读和写,打开一个二进制文件 | 出错 |
| “wb+”(读写) | 为了读和写,新建一个新的二进制文件 | 建立 |
| “ab+”(读写) | 打开一个二进制文件,在文件尾部进行读写 | 建立新文件 |
文件的顺序读写
| 功能 | 函数名 | 使用条件 |
|---|---|---|
| 字符输入函数 | fgetc | 所有输入流 |
| 字符输出函数 | fputc | 所有输出流 |
| 文本行输入函数 | fgets | 所有输入流 |
| 文本行输出函数 | fputs | 所有输出流 |
| 格式化输入函数 | fscanf | 所有输入流 |
| 格式化输出函数 | fprintf | 所有输出流 |
| 二进制输入函数 | fread | 文件 |
| 二进制输出函数 | fwrite | 文件 |
文件的随机读写
fseek
根据文件指针的位置和偏移量来定位文件指针。
可以修改文件指针的位置到任意位置,根据origin来选定文件起始或者是当前位置,根据偏移量修正位置,到任意位置处。
int fseek ( FILE * stream, long int offset, int origin );
| Constant | Reference position |
|---|---|
| SEEK_SET | Beginning of file |
| SEEK_CUR | Current position of the file pointer |
| SEEK_END | End of file * |
ftell
前面fseek 是将文件指针移动至任意位置,ftell可以返回文件指针相对于起始位置的偏移量。
long int ftell ( FILE * stream );
rewind
让文件指针的位置回到文件的起始位置。
void rewind ( FILE * stream );
feof
注意,在文件读取过程中,不能用feof 函数的返回值来判断文件是否结束。feof 使用场景是,当文件读取结束的时候,feof 判断是读取失败结束的,还是遇到文件尾部结束的。
所以正确的读取判断文件结束的方法:
- 文本文件读取是否结束,判断返回值是否为 EOF (对fgetc),或者 NULL (对fgets)
- 二进制文件的读取结束判断返回值是否小于实际要读取的个数。(fread)
文件操作小节完。主要掌握的还是如何使用文件操作函数。
相关文章:
【C语言复习】C语言中的文件操作
C语言中的文件操作写在前面文件操作什么是文件文件的分类文件名文件的操作文件指针文件的打开和关闭文件的顺序读写文件的随机读写fseekftellrewindfeof写在前面 文件操作在C语言部分只是属于了解内容,但是因为它可能会应用在项目中,所以我把它单独写成…...
00后整顿职场,当摸鱼测试员遇上了内卷00后。
在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...
程序员的上帝视角(4)——视角
对于开发人员来说,工作都是从评估一个需求开始。我们第一个要解决的问题就是看待需求的视角。视角的不同,得到的设计方案可能是完全不同的。作为一个程序员,不能单单从个人视角来看待问题。而是要尝试从不同角色出发,不停思考。上…...
一、webpack基础
webpack基础 一、webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。 说白了webpack就是一个构建和管理静态资源的工具,在我们使用框架开发时,它会在我们内部的一个或者多个入口根据我们引入的各个模块将他们根据一定的规…...
超详细VMware CentOS7(最小安装)安装教程
前言:在我们使用虚拟机的时候,不要去担心我们的一些操作会使虚拟机损坏或者有没有可能会使我们的电脑本身出现一些问题,要记住无论我们把我们的虚拟机如何都不会影响我们本身的机器,因为它只是虚拟的,在虚拟机里不要担…...
经典卷积模型回顾8—NIN实现图像分类(matlab)
首先,介绍一下NiN(Network In Network)模型。NiN模型是由加州大学伯克利分校的Lin、Chen、Yan等人在2013年提出的一种深度卷积神经网络模型,其特点是在传统的卷积神经网络中加入了多个小的全连接网络,用于对特征进行非…...
【Java笔记】泛型
本章专题与脉络 泛型概述 生活中的例子 举例1:中药店,每个抽屉外面贴着标签 举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签 举例3:家庭厨房中: Java中的泛型,就类似于上…...
【Linux】用户管理
😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享C/C相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...
深入理解Mysql索引底层数据结构与算法
索引是帮助MySQL高效获取数据的排好序的数据结构 深入理解Mysql索引底层数据结构与算法1.常见的数据结构讲解1.1 二叉树1.1.1 二叉树的定义1.1.2 二叉树示例1.1.3 Mysql为什么不使用二叉树进行数据存储1.2 红黑树1.2.1 红黑树的定义1.2.2 红黑树示例1.2.3 Mysql 为什么不适用红…...
【SpringBoot高级篇】SpringBoot集成jasypt 配置脱敏和数据脱敏
【SpringBoot高级篇】SpringBoot集成jasypt数据脱敏配置脱敏使用场景配置脱敏实践数据脱敏pomymlEncryptMethodEncryptFieldEncryptConstantEncryptHandlerPersonJasyptApplication配置脱敏 使用场景 数据库密码直接明文写在application.yml配置中,对安全来说&…...
JAVA知识体系(二)
分布式: 微服务之间的通信 当前我们微服务架构中,微服务之间使用的三种通讯方式:代理访问,feign请求,消息队列 其中代理访问我们使用的是netflix-zuul,只要是对外暴露请求的所有网关,主要用在…...
Verilog 学习第八节(数码管段码显示)
共阴极数码管:低电平端接的都是0,高电平端哪里设置为1 ,哪里就亮~ 共阳极数码管与之相反~ 视觉暂留: 对于三位的共阴极数码管 第0.01s:让数码管0的a段亮,其他数码管全灭 Sel0为高电平,sel1和sel…...
方案开发|快递吊钩电子秤方案
物流的发展为我们提供了生活的便利,足不出户仍可以感受天南地北的美食的特产,在现在这个时代已经是现实并发展成为常态的事情了。在物流发展的每一个环节中,吊钩电子秤也是它必不可缺的一环。人们在寄出物品前需要通过吊钩电子秤称量过重量&a…...
Spring-IOC容器初始化过程
Spring IOC容器的初始化过程:Resource定位,BeanDefinition载入,向IOC容器注册BeanDefinition。整个过程由refresh()方法触发,三个过程由不同的模块完成,使用户更加灵活的对这三个过程剪裁和扩展。 BeanDefinition 就是POJO对象在IOC容器中的抽象。通过BeanDefinition 这个…...
AspCms标签手册
网站通用标签{aspcms:sitepath} 网站终极目录(可放在二级目录,其它语言则在三级目录){aspcms:languagepath} 语言目录{aspcms:siteurl} 网站地址{aspcms:sitelogo} LOGO地址{aspcms:sitetitle} 网站标题{aspcms:additiontitle} 网站附加标题{aspcms:sitekeywords} 网站关键词{a…...
什么是Netty
一.Netty介绍 1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序,是目前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算…...
SpringCloud:统一网关Gateway
目录 1、网关介绍 2、搭建网关服务 3、路由断言工厂 4、路由过滤器 5、全局过滤器GlobalFilter 6、过滤器执行顺序 7、跨域问题处理 1、网关介绍 网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互 连设备࿰…...
【独家】华为OD机试 - 最差产品奖(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...
力扣解法汇总1599. 经营摩天轮的最大利润
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣 描述: 你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱…...
MySQL-常见的五种索引
什么是索引? 百度百科:在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
