文件操作及函数
什么是文件?
在程序设计中,文件有两种:程序文件和数据文件。
程序文件
包括源程序文件(.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软件…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...





