当前位置: 首页 > 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软件…...

会议纪要整理不清?如何将会议成果转化为可落地任务

身边不少HR朋友都有过纪要整理的困扰&#xff0c;一场会议或面谈后&#xff0c;花费大量时间整理&#xff0c;最终产出的纪要却零散杂乱&#xff0c;无法提炼可落地的任务&#xff0c;导致会议效果大打折扣。结合半年多的实测体验&#xff0c;整理出一套零基础也能上手的高效方…...

CG-65 剖面细管式温度传感器 小巧便携 多层温度同监测

一、产品概述&#xff1a;小巧便携&#xff0c;功能集成在农业生产、环境监测等诸多领域&#xff0c;土壤温度是一项至关重要的参数。一款性能优异的土壤温度监测设备&#xff0c;能够为相关工作提供精准的数据支持。我们的多深度土壤温度监测仪&#xff0c;正是这样一款专为精…...

2026年支持人民币计价的金价追踪APP有哪些

家人们谁懂啊&#xff01;上周我发小蹲了3个月的50克古法金镯子终于下手&#xff0c;结账的时候才傻了眼&#xff1a;她之前用来盯金价的APP默认是美元离岸价&#xff0c;自己换算的时候忘了算汇率差和国内基础金价的浮动&#xff0c;预估的总价和实际付款差了快1800&#xff0…...

Ubuntu 22.04升级后,Chrome总提示‘连接中断’?别急着重装,试试检查这个代理设置

Ubuntu 22.04升级后Chrome连接中断的深度排查指南 最近不少Ubuntu 22.04用户在系统升级后遇到了一个令人困扰的问题——Chrome浏览器频繁提示"连接中断"。这个问题看似简单&#xff0c;实则可能隐藏着系统级网络配置变更的深层原因。本文将带你从多个维度全面排查&am…...

深入LAN8720A硬件设计:从REF_CLK模式选择到SMI地址配置,如何为STM32的LWIP DHCP稳定运行打好基础

嵌入式网络硬件设计实战&#xff1a;LAN8720A与STM32的协同优化策略 在嵌入式系统开发中&#xff0c;网络功能的稳定性往往取决于硬件设计与软件配置的完美配合。当工程师面对LWIP协议栈下DHCP功能不稳定、网络时断时续的问题时&#xff0c;很容易将注意力集中在软件调试上&am…...

3种创新技术突破Cursor AI编辑器限制:cursor-free-vip深度解析

3种创新技术突破Cursor AI编辑器限制&#xff1a;cursor-free-vip深度解析 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached …...

SuperRDP完整指南:一键解锁Windows远程桌面多用户并发连接限制

SuperRDP完整指南&#xff1a;一键解锁Windows远程桌面多用户并发连接限制 【免费下载链接】SuperRDP Super RDPWrap 项目地址: https://gitcode.com/gh_mirrors/su/SuperRDP SuperRDP是基于RDPWrap技术的智能工具&#xff0c;专为突破Windows系统远程桌面功能限制而设计…...

告别手动评分!用ImageJ的IHC Profiler插件,5分钟搞定免疫组化定量分析(附避坑指南)

告别手动评分&#xff01;用ImageJ的IHC Profiler插件&#xff0c;5分钟搞定免疫组化定量分析&#xff08;附避坑指南&#xff09; 免疫组化&#xff08;IHC&#xff09;作为病理诊断和生物医学研究中的金标准技术&#xff0c;其结果的量化分析一直是困扰研究人员的难题。传统人…...

从芯片到系统:手把手拆解汽车MCU里的安全硬件(SHE/HSE)与独立HSM如何协作

汽车MCU安全架构实战&#xff1a;SHE/HSE与独立HSM的协同设计指南 当一辆现代汽车启动时&#xff0c;从车门解锁到发动机控制&#xff0c;超过1亿行代码在数百个微控制器&#xff08;MCU&#xff09;上同时运行。这些代码中包含着价值连城的数字资产——车主的生物特征数据、自…...

当你的BERT模型被‘下毒’了怎么办?聊聊NLP后门攻击的实战检测与防御(附ONION、T-Miner工具实操)

当BERT模型遭遇后门攻击&#xff1a;一线工程师的检测与防御实战指南 在部署基于BERT的文本分类服务时&#xff0c;许多团队会忽略一个潜在威胁——模型可能已在训练阶段被植入后门。这类攻击极其隐蔽&#xff1a;模型对正常输入表现完美&#xff0c;但当遇到特定触发词&#x…...