文件操作及函数
什么是文件?
在程序设计中,文件有两种:程序文件和数据文件。
程序文件
包括源程序文件(.c),目标文件(.obj),可执行程序(.exe)。
数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。
文件名
文件名包含3部分:文件路径+文件名主干+文件后缀
例如:c:\code\test.txt
文件的打开和关闭
文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件名,文件状态及文件当前位置等)。这些信息保存在一个结构体变量中。该结构体类型是由系统声明的,取名为FILE。
文件的打开和关闭
下方是文件的打开方式:
文件读写之前应该先打开文件,使用结束后应该关闭文件。
//打开文件FIle* fopen(const char* filename, const char* mode);//关闭文件int fclose(FILE * stream);
如上图,fopen的参数1是要打开的文件名,参数2是打开方式。fclose的参数是要关闭的文件名。
我们在打开或者新建文件时,要判断是否成功,如果返回了NULL(即失败),则显示错误信息。
在使用完文件后记得关闭文件,并且将指针置为NULL,否则就是野指针。
文件路径:
- 相对路径
- 绝对路径
相对路径:
当文件在.c文件位置时,我们可以正常打开文件,当文件在上一级文件夹时,就找不到文件。
如果我们想找到该文件,可以在文件名前面加上..//用来表示上一级文件夹,如果是上两级,则是"..//..//data.txt"。
绝对路径:
我们直接从根上开始写,把位置里面的\变成\\然后在文件名前面加上\\即可。
关于输入输出操作的关系如下图:
文件的顺序读写
如下图,是顺序读写函数
我们常将输入输出形象的称为流。 在c程序中,只要运行起来,默认就打开了3个流
- 标准输入流——stdin
- 标准输出流——stdout
- 标准错误流——stderr
fputc函数
参数1是要写的字符,参数2是将字符写到pf所指向的文件中。
如上图,当我们运行后,打开文本会发现,已经将abc放到文件中。注意:FILE指针指向起始位置,每一次写完一个字符,光标的位置就会发生变化,就会往后移。但是pf是不会变的。
返回值:如果输出成功,返回值是输出的字符,失败则返回EOF。
如果我们想直接打印在屏幕上,我们可以使用stdout,他的类型也是FILE*。
fgetc函数
参数是指向文件的指针。它从指向的文件读入一个字符。
返回值:如果成功,返回字符的ASCII码值,失败则返回EOF。
我们可以通过循环读出文件的所有的数据。
fputs函数
fputs的用法和fputc很像。
返回值:如果成功,将返回一个非负值。出错时,该函数返回EOF。
fgets函数
他有3个参数,参数1是要存放的字符数组str,参数2是读入一个长度为num-1的字符串,参数3是pf指向的文件。例子如下图:
如下图,它只会读取前n-1个字符,然后在最后加一个\0。
fprintf函数
fprintf函数与printf函数的参数区别在于它多了一个指向文件的指针。如上图,我们可以向指向的文件中打印内容。
fscanf函数
如上图,scanf函数就是从键盘读取,fscanf函数就是从文件从读取。他的用法跟fprintf相似,都只是在前面多个一个参数。
fwrite函数
他有4个参数,参数1是指向要写入的元素数组的指针,参数2是写入的每个元素的大小(字节为单位),参数3是元素的个数,参数4是指向文件的指针。
运行后,打开文件,发现内容都是看不懂的符号,这是因为这是以二进制的形式输出的。
fread函数
他的参数跟fwrite完全一样。
如上图,fread把文件中的二进制信息读取后放到了arr数组中。
函数的对比
sprintf只是在前面多了一个参数。它把格式化的数据放到了字符串中。
sscanf也类似,不过它是将字符串中的内容放到了后面的地址中。
文件的随机读写
fseek函数
fseek的参数1是指向文件的指针,参数2是移动的步数,参数3是下方三个之一。如上图,当我们想把光标移到文件的开头时,就可以通过fseek移动。
ftell函数
ftell 返回文件指针相对于起始位置的偏移量。如下图:
rewind函数
rewind函数会让文件指针的位置回到文件的起始位置,它也只有一个参数。
文本文件和二进制文件
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
如果要求在外存上以ASCII码的形式储存,则需要在储存前转换。以ASCII字符的形式存储的文件就是文本文件。
字符一律以ASCII形式存储。数值型数据可以ASCII形式,也可以二进制形式存储。
如上图,1的ASCII值是49,所以是00110001。
文件读取结束的判定
被错误使用的feof
牢记:在文件读取过程中,不能用feof函数的返回值直接判断文件的读取是否结束。
feof的作用是:当文件读取结束时,判断读取结束的原因是否是:遇到文件尾结束。
ferror——在文件读取结束后,用来判断文件是否因为读取过程中遇到错误而结束。
feof——在文件读取结束后,用来判断文件是否因为读取过程中遇到文件结束标志而结束。
如上图,当遇到文件结束标志而结束时,则feof为真。
如果ferror返回值为0(假),表示为出错。如果返回一个非零值,表示出错。
文件缓冲区
从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。从磁盘到内存的方式也是这样。大致关系如下图:
因为缓冲区的存在,c语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做,可能导致读写文件的问题。
刷新缓冲区可以用fflush()函数,参数是指向文件的指针。刷新缓冲区时,才将输出(读入)缓冲区的数据到文件(内存)。
相关文章:

文件操作及函数
什么是文件? 在程序设计中,文件有两种:程序文件和数据文件。 程序文件 包括源程序文件(.c),目标文件(.obj),可执行程序(.exe)。 数据文件 文件的内容不一定是程序&…...

阿里云国际版无法远程连接Windows服务器的排查方法
如果您遇到紧急情况,需要尽快登录Windows实例,请参见以下操作步骤,先检查ECS实例的状态,然后通过云助手向Windows实例发送命令或通过VNC登录实例,具体步骤如下: 步骤一:检查ECS实例状态 无论何…...

华清远见嵌入式学习——QT——作业4
作业要求: 代码运行效果图: 代码: 头文件: #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…...
Visuial Studio 打开 Unity 脚本时,脚本继承MonoBehaviour暂时失效为白色的解决方法
问题描述: u3d2020.3.47f1c1 vs2019 之前C#脚本A好好的,今天改了一行代码,在储存,就出现这个问题了,变白之后,新增的一行代码不生效,之前的代码照常运行。 如下办法都不能解决我的问题&…...
CentOS使用kkFileView实现在线预览word excel pdf等
一、环境安装 1、安装LibreOffice wget https://downloadarchive.documentfoundation.org/libreoffice/old/7.5.3.2/rpm/x86_64/LibreOffice_7.5.3.2_Linux_x86-64_rpm.tar.gz # 解压缩 tar -zxf LibreOffice_7.5.3.2_Linux_x86-64_rpm.tar cd LibreOffice_7.5.3.2_Linux_x86…...

黑豹程序员-EasyExcel实现导出
需求 将业务数据导出到excel中,老牌的可以选择POI,也有个新的选择EasyExcel。 有个小坑,客户要求样式比较美观,数字列要求千位符,保留2位小数。 可以用代码实现但非常繁琐,用模板就特别方便,模…...

【项目小结】优点分析
一、 个人博客系统 一)限制强制登录 问题:限制用户登录后才能进行相关操作解决: 1)前端: ① 写一个函数用于判断登录状态,如果返回的状态码是200就不进行任何操作,否则Ajax实现页面的跳转操作…...

已经写完的论文怎么降低查重率 papergpt
大家好,今天来聊聊已经写完的论文怎么降低查重率,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 已经写完的论文怎么降低查重率 背景介绍 在学术界,论文的查重率是评价论文质量的…...

科研论文中PPT图片格式选择与转换:EPS、SVG 和 PDF 的比较
当涉及论文中的图片格式时,导师可能要求使用 EPS 格式的图片。EPS(Encapsulated PostScript)是一种矢量图格式,它以 PostScript 语言描述图像,能够无损地缩放并保持图像清晰度。与像素图像格式(如 PNG 和 J…...
mybatis xml 热部署
平时我们在项目中多多少少会根据不同的情况等等原因去调试sql,在数据库测试完后也需要在代码里面运行测试,但是每次修改就需要重启服务就显得太繁琐,所以如果mybatis的xml也可以热部署当然是最好的了,那我来试试如何可以将mybatis…...

MySQL的事务以及springboot中如何使用事务
事务的四大特性: 概念: 事务 是一组操作的集合,它是不可分割的工作单元。事务会把所有操作作为一个整体,一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 注意: 默认MySQ…...
docker二 redis单机安装
创建文件夹 mkdir -p /usr/local/redis/data /usr/local/redis/logs /usr/local/redis/conf chmod -R 777 /usr/local/redis/data* chmod -R 777 /usr/local/redis/logs*另一种风格 # 创建 redis 配置存放目录 mkdir -p /home/docker/redis/conf && chmod 777 /home/…...

【解决】Vue elementUI table表格 列错位/滑动后切换每页显示数后错位/表格使用fixed后错位...
table表格右侧列固定后,在切换页面之后,就会出现列错误的现象 <el-tablev-adaptive"{ bottomOffset: 85 }"height"100px"v-loading"loading":data"dataList"> 解决方法 方法一 1、给表格添加ref &…...

uniapp实战 —— 分类导航【详解】
效果预览 组件封装 src\pages\index\components\CategoryPanel.vue <script setup lang"ts"> import type { CategoryItem } from /types/index defineProps<{list: CategoryItem[] }>() </script><template><view class"category&…...

LangChain学习二:提示-实战(下半部分)
文章目录 上一节内容:LangChain学习二:提示-实战(上半部分)学习目标:提示词中的示例选择器和输出解释器学习内容一:示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战:…...

Network 灰鸽宝典【目录】
目前已有文章 21 篇 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 文章目录 服务配置环境部署GitNPM 浏览器编辑器系…...

基于SSM的实验室排课系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

Docker部署wordpress和Jenkins
准备机器: 192.168.58.151 (关闭防火墙和selinux) 安装好docker服务 (详细参照:http://t.csdnimg.cn/usG0s 中的国内源安装docker) 部署wordpress: 创建目录: [rootdocker ~]# mkdi…...

C语言—每日选择题—Day45
第一题 1. 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是() A: B:- C: D: 答案及解析 A A:错误,指针不可以相加,因为指针相加可能发生越界&…...

音乐制作软件Studio One mac软件特点
Studio One mac是一款专业的音乐制作软件,由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能,包括录制、编曲、合成、采样等多种工具,可用于制作各种类型的音乐,如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...