文件(打开关闭读写) C语言

news2024/9/23 23:42:22

一、文件


二、打开文件 关闭文件

FILE *fopen(const char *path, const char *mode);

功能: 打开文件,获得对应的流指针数:

"r"            只读方式,文件必须存在,不存在则报错

"r+"       读写方式,文件必须存在,不存在则报错的空文件的空文件

"w"            只写方式,文件存在时,截短为 0  ,不存在,则创建 -->创建了一个新文件

"w+"          读写方式,文件存在时,截短为 0  ,不存在,则创建 -->创建了一个新文件

"a"            追加(写),文件存在时,从文件末尾开始写,文件不存在时,则新建一个文件

"a+"          追加(读写),文件存在时,从文件末尾开始写,文件不存在时,则新建一个文件

对二进制文件:

"rb"       "rb+"     "wb"       "wb+"     "ab"       "ab+"

返回值:

        成功   FILE 指针

        失败   NULL


fclose(FILE *)

p.s.

当开始运行一个 C 程序时,系统将会负责自动打开三个文件: 标准输入   标准输出  标准出错

与之对应的指针分别为:stdin     stdout    stderr

这三个指针都是常量通常情况下:

标准输入---一般与键盘连接

标准输出  标准出错-- 与终端屏幕连接

打开关闭文件:


三、读、写(文件的定位)

1、按字符读写

读:(从文件中读取一个字符)

int fgetc(FILE *stream);

功能: 从指定的流文件中获得字符参数:

        @stream 指定的文件指针

返回值:

        成功 返回 对应字符的 ascii值

        失败 EOF (文件结束)error(错误)    都是-1

区分: eof 还是error

        //检查对应文件的状态(eof error)

        int feof(FILE *stream);//如果对应的文件数据到达文件结尾(eof),则该函数的返回值为非 0 值

        int ferror(FILE *stream); //如果对应的文件数据出错,则该函数的返回值为非 0 值


读取单个字符:

循环读取单个字符到文件结尾:

另一种写法:


2、写:(往指定文件中写入一个字符)

int fputc(@c,FILE *stream);

功能:

        实现字符输出参数:

        @c     要输入的字符

        @stream 指定的输入文件对应的文件指针

返回值:

成功 写入的字符对应的 ascii 码

失败 EOF

写入单个字符:


3、按行读写,按字符串进行读写

读:(从文件中读取一行字符串)

char *fgets(char *s, int size, FILE *stream);

功能: 获取字符(串) 参数:

        @s         自己开辟的一块内存空间的首地址(用来保存获取到数据)

        @size 一次 fgets 操作期望读取到的最大字符个数

        @stream 指定的输入文件的文件指针返回

返回值:

        成功 s

        失败 NULL

        文件结尾 NULL

读取结束:

(1) EOF

(2) '\n'

(3) size

'\n' 的处理:fgets 会将 '\n' 保存到 buffer 中去

        buffer:缓冲器

每次读取结束 最后都会添加一个 '\0' ,保证是一个字符串

fgets 一次最多能读取 size - 1 个字符

读取一行字符串:

写:

int fputs(const char *s, FILE *stream); // 将 s 指定的字符串输出到 stream 指定的文

件中

fputs 不会将'\0'进行输出,遇到'\0'就输出

4、按对象读写(二进制的读写)

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

对象: --> 可以指定按什么数据类型进行操作(int char short 结构体等)

参数:

        @ptr                       保存数据的

        @size                     单个对象的大小              sizeof(对象类型)

        @nmemb                   一次期望操作的对象个数

        @stream                要操作的流文件

返回值:

        成功 返回值 成功操作的 对象个数

        失败 0

注意:

        一次操作的字节数  =  成功操作的对象个数 * 单个对象的大小

        如果想完整的读取到文件的内容,文件中没有固定的数据格式时, 最好按 char 来读。

读写一组数据:


四、文件定位:

int fseek(FILE *stream, long offset, int whence);

功能: 设置 offset 的值,实现定位

参数:

        @stream 要定位的文件指针

        @offset 偏移值

        @whence 相对的偏移起点

        SEEK_SET                        从文件开头偏移(0)    offset >= 0

        SEEK_CUR                       当前位置(1)      offset 可正可负

        SEEK_END                       文件结尾(2)      offset  可正可负

返回值:

成功 0

失败 -1 &error 置位

eg:

//从文件开头偏移 100 个字节

fseek(fp,100,SEEK_SET);

//从当前位置 往后偏移 100 字节

fseek(fp,100,SEEK_CUR);

//从当前位置 往前偏移 100 字节

fseek(fp,-100,SEEK_CUR);

//从文件尾部位置 往后偏移100 字节------- >相当于在源文件的基础上又扩充了100 个字节

fseek(fp,100,SEEK_END);

重定位:大小可以通过计算获得

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2158786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2019配置Open3Dv0.18.0版本库

文章目录 一、引言二、配置过程三、举个例子参考资料一、引言 现在如果直接使用vs2019对Open3D(v0.15.2)进行编译,会比较麻烦,一是需要科学上网,另一个就是容易出现错误,这里就仍然按照之前的思路来配置新版本的Open3D(VS2015(及以上版本)配置Open3Dv0.15.2版本库)。 二…

计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)

1,绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)

一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV(Open Source Computer Vision Library,开源计算机视觉库)的一个重要更新版本,该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX(Open Neu…

YOLO V10简单使用

一.环境安装 1、下载官方源码 官方GitHub地址:https://github.com/THU-MIG/yolov10 点击跳转 2. 配置conda环境 在conda创建python3.9环境 conda create -n yolov10 python3.9激活切换到创建的python3.9环境 conda activate yolov103. 安装YOLOv10依赖 切换…

GitHub上图像超分开源项目推荐【持续更新】

RAISR 介绍:RAISR(Rapid and Accurate Image Super-Resolution)是一种由Google开发的图像超分辨率技术,它利用机器学习算法来提高低分辨率图像的质量,使其看起来更加清晰和细致。这项技术可以在移动设备上实时运行&am…

JBoss EJBInvokerServlet CVE-2013-4810 反序列化漏洞

环境 vulhub/jboss/JMXInvokerServlet-deserialization 复现 此漏洞存在于JBoss中 /invoker/JMXInvokerServlet 路径。访问若提示下载 JMXInvokerServlet,则可能存在漏洞: 1.访问123.57.211.129:8081/invoker/JMXInvokerServlet 使⽤JavaDeserH2HC进…

聊聊通过「白包账号」能否提高谷歌上架成功率?

大家好,我是牢鹅!按国际惯例先吐槽下谷歌,近一年来对谷歌开发者来说很难,一方面谷歌政策严厉打击;另一方面审查机制不够健全,过分依赖大模型驱动审核,改善他们所谓的执行力。与苹果相比&#xf…

Easy Excel从入门到精通!!!

目录 1.文件导入 1.1基本方式读取excel文件内容 1.2注解模型映射器读取excel 1.3多行表头读取 1.4文件上传读取 2.文件导出 2.1基本方式导出 2.2模型映射导出 2.3设置行高、列宽等内容 2.4合并单元格 2.5导出设置超链接、批注、公式 2.6模板填充对象导出 2.7模板填…

AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)、“智谱AI”(glm-4-0520)生成了今日要点以及每条资讯的摘要。欢迎阅…

2024个人简历模板免费可编辑,可能是整理最全的简历(支持Word格式下载)

提供各行业简历模板WORD可编辑格式下载,涵盖求职简历模板、大学生简历模板、个人简历模板、留学简历模板、英文简历模板、免费简历模板、工作简历模板、保研简历模板、暑期实习简历、寒假实习简历、校招简历等。 都是word格式,直接下载就能用。 网盘链…

【重磅】考虑火电机组储热改造的电力系统低碳经济调度

目录 1 主要内容 储热改造原理 约束条件 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑火电机组储热改造的电力系统低碳经济调度》,利用原文献火电机组储热改造方案建立模型,在传统火电机组的基础上加装热能存储系统&#xf…

BEV学习--Nuscenes数据集解读

一、Nuscenes数据集简介 Nuscenes数据的采集来自不同城市的1000个场景中,采集车上配备了完善的传感器,包括6个相机(CAM)、1个激光雷达(LIDAR)、5个毫米波雷达(RADAR)、IMU和GPS&…

【RabbitMQ】RabbitMQ 的概念以及使用RabbitMQ编写生产者消费者代码

目录 1. RabbitMQ 核心概念 1.1生产者和消费者 1.2 Connection和Channel 1.3 Virtual host 1.4 Queue 1.5 Exchange 1.6 RabbitMO工作流程 2. AMQP 3.RabbitMO快速入门 3.1.引入依赖 3.2.编写生产者代码 ​3.3.编写消费者代码 4.源码 1. RabbitMQ 核心概念 在安装…

Java中的事件(动作监听-ActionListener)

(一)、ActionListener接口 ActionListener接口用于处理用户界面上的动作事件,例如:按钮点击、菜单选择等。实现ActionListener接口需要重写actionPerformed(ActionEvent e)方法,该方法会在动作发生时被调用。 &#…

苍穹外卖上半部分总结

苍穹外卖一个很经典的项目 虽然已经烂大街,但项目依旧是很优秀,并且代码十分规范,很值得学习。 前置介绍 niginx反向代理 前端和后端的url请求不一致的原因:前端是请求到nginx服务器,再由nginx服务器转发到后端 ngi…

个人防护装备检测系统源码分享

个人防护装备检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

字母与符号检测系统源码分享

字母与符号检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

全国职业院校技能大赛(大数据赛项)-平台搭建Spark、Scala笔记

Spark作为一个开源的分布式计算框架拥有高效的数据处理能力、丰富的生态系统、多语言支持以及广泛的行业应用。Scala是一种静态类型的编程语言,它结合了面向对象编程和函数式编程的特性,被誉为通用的“大数据语言”。而二者的结合更能迸发出新奇的化学反…

深度学习之微积分预备知识点(2)

极限(Limit) 定义:表示某一点处函数趋近于某一特定值的过程,一般记为 极限是一种变化状态的描述,核心思想是无限靠近而永远不能到达 公式: 表示 x 趋向 a 时 f(x) 的极限。 知识点口诀解释极限的存在左…

itextsharp报错 PdfReader not opened with owner password

itextsharp报错 PdfReader not opened with owner password itextsharp读取PDF时报错: PdfReader not opened with owner password 报错原因(据说是):pdf 文件设置了加密。 网上搜索了一下,查到大多数答案是: 在创建pdfReader…