当前位置: 首页 > news >正文

文件操作及函数

什么是文件? 

在程序设计中,文件有两种:程序文件和数据文件。

程序文件

包括源程序文件(.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个流

  1. 标准输入流——stdin
  2. 标准输出流——stdout
  3. 标准错误流——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

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; 头文件&#xff1a; #ifndef ALARMCLOCK_H #define ALARMCLOCK_H#include <QWidget> #include <QTimerEvent> #include <QTimer> #include <QTime> #include <QTextToSpeech&g…...

Visuial Studio 打开 Unity 脚本时,脚本继承MonoBehaviour暂时失效为白色的解决方法

问题描述&#xff1a; u3d2020.3.47f1c1 vs2019 之前C#脚本A好好的&#xff0c;今天改了一行代码&#xff0c;在储存&#xff0c;就出现这个问题了&#xff0c;变白之后&#xff0c;新增的一行代码不生效&#xff0c;之前的代码照常运行。 如下办法都不能解决我的问题&…...

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中&#xff0c;老牌的可以选择POI&#xff0c;也有个新的选择EasyExcel。 有个小坑&#xff0c;客户要求样式比较美观&#xff0c;数字列要求千位符&#xff0c;保留2位小数。 可以用代码实现但非常繁琐&#xff0c;用模板就特别方便&#xff0c;模…...

【项目小结】优点分析

一、 个人博客系统 一&#xff09;限制强制登录 问题&#xff1a;限制用户登录后才能进行相关操作解决&#xff1a; 1&#xff09;前端&#xff1a; ① 写一个函数用于判断登录状态&#xff0c;如果返回的状态码是200就不进行任何操作&#xff0c;否则Ajax实现页面的跳转操作…...

已经写完的论文怎么降低查重率 papergpt

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

科研论文中PPT图片格式选择与转换:EPS、SVG 和 PDF 的比较

当涉及论文中的图片格式时&#xff0c;导师可能要求使用 EPS 格式的图片。EPS&#xff08;Encapsulated PostScript&#xff09;是一种矢量图格式&#xff0c;它以 PostScript 语言描述图像&#xff0c;能够无损地缩放并保持图像清晰度。与像素图像格式&#xff08;如 PNG 和 J…...

mybatis xml 热部署

平时我们在项目中多多少少会根据不同的情况等等原因去调试sql&#xff0c;在数据库测试完后也需要在代码里面运行测试&#xff0c;但是每次修改就需要重启服务就显得太繁琐&#xff0c;所以如果mybatis的xml也可以热部署当然是最好的了&#xff0c;那我来试试如何可以将mybatis…...

MySQL的事务以及springboot中如何使用事务

事务的四大特性&#xff1a; 概念&#xff1a; 事务 是一组操作的集合&#xff0c;它是不可分割的工作单元。事务会把所有操作作为一个整体&#xff0c;一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 注意&#xff1a; 默认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表格右侧列固定后&#xff0c;在切换页面之后&#xff0c;就会出现列错误的现象 <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学习二:提示-实战(下半部分)

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

Network 灰鸽宝典【目录】

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

基于SSM的实验室排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

Docker部署wordpress和Jenkins

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

C语言—每日选择题—Day45

第一题 1. 以下选项中&#xff0c;对基本类型相同的指针变量不能进行运算的运算符是&#xff08;&#xff09; A&#xff1a; B&#xff1a;- C&#xff1a; D&#xff1a; 答案及解析 A A&#xff1a;错误&#xff0c;指针不可以相加&#xff0c;因为指针相加可能发生越界&…...

音乐制作软件Studio One mac软件特点

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

vLLM推理引擎教程8-CUDA Graph内存池优化

1. CUDA Graph内存池优化原理 在vLLM这类大模型推理引擎中&#xff0c;CUDA Graph技术已经成为提升性能的标配方案。但很多开发者在使用过程中会遇到一个棘手问题&#xff1a;当需要处理不同batch size的请求时&#xff0c;显存碎片和重复分配会导致性能下降。这时候就需要引入…...

从COX分析到预后模型:如何用R筛选关键基因并画出发表级森林图?

从COX分析到预后模型&#xff1a;如何用R筛选关键基因并画出发表级森林图&#xff1f; 在生物信息学研究中&#xff0c;COX比例风险模型是分析基因与患者生存关系的重要工具。但许多研究者在完成初步分析后常陷入困惑&#xff1a;面对数十个候选基因&#xff0c;如何筛选真正有…...

双模型协作方案:OpenClaw同时接入Phi-3-vision-128k-instruct与Qwen的配置技巧

双模型协作方案&#xff1a;OpenClaw同时接入Phi-3-vision-128k-instruct与Qwen的配置技巧 1. 为什么需要双模型协作&#xff1f; 去年我在搭建个人自动化助手时&#xff0c;发现单一模型很难兼顾所有任务场景。当我尝试用纯文本模型处理截图中的表格数据时&#xff0c;识别准…...

从开发到安全:SpringBoot/Struts2/Laravel框架那些“第三方组件”挖出的坑,你的项目踩中了吗?

第三方组件安全黑洞&#xff1a;主流开发框架中那些被忽视的高危依赖 当我们在讨论框架安全时&#xff0c;往往聚焦于SpringBoot、Laravel等核心框架本身&#xff0c;却忽略了那些如影随形的第三方组件。这些"搭便车"的依赖项&#xff0c;正成为企业应用安全的阿喀琉…...

飞书机器人集成实战:OpenClaw+Phi-3-vision-128k-instruct打造智能问答助手

飞书机器人集成实战&#xff1a;OpenClawPhi-3-vision-128k-instruct打造智能问答助手 1. 为什么选择这个技术组合&#xff1f; 上周我接到一个产品经理的需求——希望能通过飞书直接发送产品截图&#xff0c;自动获得功能分析报告。传统方案需要开发整套服务端逻辑&#xff…...

陈文自媒体:暗水印功能上线,2类玩家要发财了!

作者陈文&#xff0c;公众号&#xff1a;陈文日记&#xff0c;90后草根创业者&#xff0c;5年自媒体经验&#xff0c;聚焦体育自媒体和小红书商单&#xff0c;关注我&#xff0c;越分享收获越多。 2026年4月了&#xff0c;抖音最牛逼的暗水印上线了&#xff0c;很多千川的老铁麻…...

探索基于BKA - Transformer - LSTM的数据回归预测

基于BKA-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先&#xff0c;采用Transformer自注意力机制捕捉数据的全局依赖性&#xff0c;并输出一个经过全局上下文编码的表示&#xff1b;然后&#xff0c;采用2024年最新…...

c++编程:D进制的A+B(1022-PAT乙级)

1022. D进制的AB#include<bits/stdc.h> using namespace std; int main() { int A, B, D; // 定义三个整数变量 A、B 和进制 Dcin >> A >> B >> D; // 从标准输入读取 A、B、D 的值int sum A B; // 计算…...

Abaqus模拟铝合金搅拌摩擦焊顺序热力耦合过程:残余应力仿真与最优焊接方案对比

abaqus铝合金搅拌摩擦焊&#xff0c;顺序热力耦合中残余应力的仿真&#xff0c;根据仿真温度去模拟焊后残余应力&#xff0c;焊接过程中不同焊接方案下的温度、瞬态应力变化曲线以及焊后残余变形&#xff0c;对比最优焊接方案铝合金搅拌摩擦焊&#xff08;FSW&#xff09;的数值…...

Linux系统线程数量限制与优化指南

1. 进程与线程基础概念回顾在深入探讨进程能创建多少线程之前&#xff0c;我们需要先明确几个基本概念。进程是操作系统资源分配的基本单位&#xff0c;而线程则是CPU调度的基本单位。每个进程至少包含一个主线程&#xff0c;这个主线程可以创建其他子线程。线程与进程最大的区…...