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

【文件操作API的使用】

1.概念

这对聪明的你们来说简直就是,对吗。

那什么是文件操作符,文件操作又有哪些步骤呢?

文件操作符通常用于指代在计算机编程中用于处理文件的特殊符号或标识符。在很多编程语言中,文件操作符被用于打开、关闭、读取和写入文件,以及对文件进行其他操作。

一般来说,文件操作有以下步骤:

  1. 打开文件:使用文件操作符可以打开一个文件,使得程序能够访问文件的内容。通常情况下,打开文件需要提供文件名、路径以及访问模式等信息。

  2. 关闭文件:在文件使用完毕后,应该及时关闭文件,释放文件相关的资源。关闭文件可以通过文件操作符完成。

  3. 读取文件:文件操作符可以用于从文件中读取数据。读取文件时,文件操作符会根据指定的位置读取特定数量的数据,并将数据传递给程序进行处理。

  4. 写入文件:除了读取文件外,文件操作符也可以用于向文件中写入数据。程序可以使用文件操作符将数据写入文件的指定位置。

  5. 移动文件指针:文件操作符还可以用于移动文件指针的位置。文件指针表示了当前读取或写入位置在文件中的偏移量。通过移动文件指针,程序可以在文件中进行定位读取或写入操作。

在不同的编程语言和操作系统中,文件操作符的具体实现方式可能会有所不同。
例如,在C语言中,文件操作符通常是通过使用 FILE 结构体和相关的函数来实现的。
而在Python等高级语言中,文件操作符则可能是通过内置的文件对象来实现的。

今天我们就以C语言为例

2.C语言文件操作的api介绍

fopen和fclose

fopen() 是一个用于在C语言中打开文件的标准库函数。
它通常用于打开一个文件,并返回一个指向该文件的文件指针。fopen() 函数具有以下一般形式:FILE *fopen(const char *filename, const char *mode);其中:参数1:filename:要打开的文件的路径。参数2:mode:打开文件的模式,可以是以下之一:
"r":只读模式。文件必须存在,否则函数失败。
"w":写入模式。如果文件存在,则文件内容被清空,如果文件不存在,则创建新文件。
"a":追加模式。如果文件存在,写入的数据将被追加到文件末尾,如果文件不存在,则创建新文件。
"r+":读写模式。文件必须存在,文件的内容可以被读取和写入。
"w+":读写模式。如果文件存在,则文件内容被清空,如果文件不存在,则创建新文件。
"a+":读写模式。如果文件存在,写入的数据将被追加到文件末尾,如果文件不存在,则创建新文件。
函数返回一个指向文件的指针,如果打开文件失败,则返回 NULL。close() 函数用于关闭一个已打开的文件。关闭文件后,释放与该文件相关的所有资源,
并将文件指针指向 NULL。它的一般形式如下:int fclose(FILE *stream);
其中:stream:指向已经被 fopen() 打开的文件的指针。
函数返回值为 0 表示成功关闭文件,返回 EOF 表示关闭文件失败

当然,我们还有其他的打开方式

 

 fgetc和fputc

fgetc() 和 fputc() 是用于在 C 语言中进行文件读写操作的标准库函数。fgetc()
fgetc() 函数用于从指定的文件中读取一个字符,并将文件指针向前移动到下一个字符位置。
它的一般形式如下:
int fgetc(FILE *stream);其中:
stream:指向已经被 fopen() 打开的文件的指针。
函数返回值是读取的字符,如果到达文件结尾或者出现错误,
则返回 EOF(表示 End Of File)。fputc()
fputc() 函数用于向指定的文件中写入一个字符,并将文件指针向前移动到下一个字符位置。
它的一般形式如下:int fputc(int character, FILE *stream);
其中:character:要写入的字符。
stream:指向已经被 fopen() 打开的文件的指针。
函数返回成功写入的字符,如果出现错误,则返回 EOF。

介绍了这两个,那我们就可以写一个函数测试一下喽

 fputs和fgets

显而易见了吧,我们只有一个字母的区别,而且‘s’很明显,就是字符串喽

fgets() 函数用于从指定的文件流中读取一行,并将其存储在字符串中。它的一般形式如下:char *fgets(char *str, int num, FILE *stream);
其中:str:是一个指向字符数组的指针,用于存储读取的字符串。
num:是要读取的最大字符数(包括空字符 \0)。
stream:是一个指向 FILE 对象的指针,它指定了要读取的文件流。
函数返回指向存储字符串的指针,如果到达文件末尾或者出现错误,则返回 NULL。fputs() 函数用于将一个字符串写入到指定的文件流中。它的一般形式如下:int fputs(const char *str, FILE *stream);
其中:str:是一个指向要写入的字符串的指针。
stream:是一个指向 FILE 对象的指针,它指定了要写入的文件流。
函数返回非负值表示成功,返回 EOF 表示写入失败。

 

fprintf和fscanf

前面我们说到的均为输入输出流( fgetc和fputc, fputs和fgets)而这个尾格式化输入输出流(fprintf和fscanf

fprintf() 和 fscanf() 是 C 语言中用于文件操作的函数,
它们与 printf() 和 scanf() 函数非常类似,但是它们从文件流中读取或写入数据。fprintf() 函数用于将格式化数据写入到文件中。它的一般形式如下:int fprintf(FILE *stream, const char *format, ...);
其中:stream 是一个指向 FILE 对象的指针,它指定了要写入的文件流。
format 是一个字符串,包含了要写入到文件中的文本以及格式化指示符。
... 是要写入到文件的数据,可以是变量列表。
fprintf() 函数的返回值是成功写入到文件中的字符数,如果发生错误,则返回一个负值。fscanf() 函数用于从文件中读取格式化数据。它的一般形式如下:int fscanf(FILE *stream, const char *format, ...);
其中:stream 是一个指向 FILE 对象的指针,它指定了要读取的文件流。
format 是一个字符串,包含了要读取的数据的格式化指示符。
... 是用于接收读取的数据的变量列表。
fscanf() 函数的返回值是成功读取到的变量数,如果到达文件末尾或者发生错误,则返回 EOF。

fread和fwrite(用于二进制文件的读写操作) 

fread() 和 fwrite() 是 C 语言中用于文件操作的函数,它们与 fprintf() 和 fscanf() 类似,
但是它们用于二进制文件的读写操作。fwrite() 函数用于将数据块以二进制形式写入到文件中。它的一般形式如下:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
其中:ptr 是一个指向要写入的数据块的指针。
size 是每个数据块的大小(以字节为单位)。
nmemb 是要写入的数据块的数量。
stream 是一个指向 FILE 对象的指针,它指定了要写入的文件流。
fwrite() 函数的返回值是成功写入的数据块数量,如果发生错误,则返回一个小于 nmemb 的值。fread() 函数用于从二进制文件中读取数据块。它的一般形式如下:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
其中:ptr 是一个指向用于存储读取数据的缓冲区的指针。
size 是每个数据块的大小(以字节为单位)。
nmemb 是要读取的数据块的数量。
stream 是一个指向 FILE 对象的指针,它指定了要读取的文件流。
fread() 函数的返回值是成功读取的数据块数量,如果到达文件末尾或者发生错误,
则返回一个小于 nmemb 的值。

 feof和ferror

`feof` 和 `ferror` 都是用于检查文件流状态的函数,但有一些区别:1. `feof(FILE *stream)` 函数用于检查给定文件流 `stream` 是否已经到达文件末尾。
当文件流到达文件末尾时,`feof` 返回非零值;否则,返回 0。2. `ferror(FILE *stream)` 函数用于检查给定文件流 `stream` 的错误标志是否被设置。
如果文件流 `stream` 的错误标志被设置,`ferror` 返回非零值;否则,返回 0。在使用这两个函数时,应当注意它们的返回值不是绝对的,需要结合其他函数一起使用,
比如 `fgets`、`fscanf`、`fread`、`fwrite` 等读写函数,
检查它们的返回值以及 `feof` 和 `ferror` 的返回值,以正确处理文件流状态和错误。

 3,每期一问

正确的使用feof和ferror

相关文章:

【文件操作API的使用】

1.概念 这对聪明的你们来说简直就是,对吗。 那什么是文件操作符,文件操作又有哪些步骤呢? 文件操作符通常用于指代在计算机编程中用于处理文件的特殊符号或标识符。在很多编程语言中,文件操作符被用于打开、关闭、读取和写入文件…...

C++ 让类只在堆或栈上分配

1. 让类只在栈上或堆上分配内存 在C中,类的对象建立分为两种: 一种是静态建立,如A a; 另一种是动态建立,如A* ptrnew A;这两种方式是有区别的。 1、静态建立类对象:是由编译器为对象在栈空间…...

SpringMVC源码分析(九)--返回值解析器

1.返回值解析器介绍 返回值解析器用于解析Hanlder执行方法后的返回结果,例如将方法上标注有@ResponseBody注解的返回值解析成JSON、将方法返回的字符串作为视图名等 SpringMVC中默认的返回值解析器见RequestMappingHandlerAdapter#getDefaultReturnValueHandlers private L…...

京西商城——创建订单和获取订单接口

在之前的写过的接口中,我先后用了基于View和APIView来编写视图类 基于APIView类的时候相对于View会有很多便捷,但其实drf还在APIView的基础上又封装了一个 GenericAPIView 类,会大大减少了在编写视图时的重复代码和在修改代码时的工作量。 G…...

大话设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架,而将具体步骤的实现留给子类来完成,从而使子类…...

新model开发记录

模型使用 -- 用blender导出为 fbx ,修改渲染方式(点击模型->Materials->Extract Materials(将材质从fbx中 单独提取出来了)->Materials 选择 Shader -> SimpleURPToonLitExample 点开脸的材质,勾选第一条) 解决角色…...

ARMday1

1.总结keil5下载代码和编译代码需要注意的事项 答:下载代码时,确保stlink的驱动有效、魔术棒中硬件型号的连接 编译代码时,先将配置魔术棒里Debug中的Setting,将Flash中Reset and Run勾选上,并去除pack中的Enab…...

【C++风云录】创造视觉奇迹:探索C++图形编程的魅力与可能性

图形与界面:从SFML到Allegro,探索C图形编程的世界 前言 随着计算机图形技术和界面设计的快速发展,图形编程在软件开发中变得越来越重要。C作为一种功能强大的编程语言,为开发人员提供了丰富的图形编程工具和库。本文将介绍几个流…...

常见的Nginx+Redis+MQ+DB架构设计

三高,复杂的架构 SQRS CAP 缓存,限流 【Redis,缓存】 cache-aside 缓存cache:数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis:放当前在线用户,热点数据...

vue+elementUI搭建动态表头的表格

前提:以下代码是vue2项目结合elementUi完成的 数据结构 后端传来的数据是两个list,一个表头的list,一个表格内容的list // 表头 headTableAtts: [{ columnLabel: 姓名, columnName: name },{ columnLabel: 年龄, columnName: age },{ colu…...

【ENSP】交换机和交换机之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 2.实现方法 交换机允许对应vlan通行,配置vlanif的ip地址,做静态路由 3.静态路由配置方法 ip route-static 目的网段 子网掩码 下一跳设备 LSW1三层交换机配置 u t m sys vlan batch 10 20 …...

2024.2.18力扣每日一题——N叉树的前序遍历

2024.2.18 题目来源我的题解方法一 深度优先遍历(递归方式)方法二 迭代方式(栈实现) 题目来源 力扣每日一题;题序:589 我的题解 方法一 深度优先遍历(递归方式) 与二叉树的前序遍…...

Taro活动列表中,对某一个活动添加分享按钮

采用data-留下分享链接的拼接参数 1.在item文件中写按钮 openType“share” <ButtonclassName{classes.rowRightShareButton}openType"share"data-share-transfer-id{lastGiftingTransferId}data-share-picture-url{shareUrl}data-share-title{shareTitle}onClic…...

深入理解计算机系统 家庭作业 2.65

/* 异或运算可以把同为1时变成0。 */ #include <stdio.h> #include <stdlib.h> int odd_ones(unsigned x); int main(void) { int x0xF00000016; printf("x的奇数位:%d",odd_ones(x)); return 0; } int odd_ones(unsigned x) { char…...

Java字节码

Java Agent概述 Java Agent是一种特殊类型的软件组件&#xff0c;它允许在Java虚拟机&#xff08;JVM&#xff09;运行时修改应用程序的字节码。这种技术通常用于性能监控、日志记录、系统调试等。Java Agent主要分为两类&#xff1a; 1. 启动时加载的Agent&#xff08;Pre-Ma…...

深入解析大数据体系中的ETL工作原理及常见组件

** 引言 关联阅读博客文章&#xff1a;探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;大数据处理已经成为了企业成功的重要组成部分。而在大数据处…...

条件变量的简易C++实现版

条件变量通常与互斥锁一起使用&#xff0c;用于线程间的同步。以下是条件变量常用的一些函数&#xff1a; ①std::condition_variable::wait(lock, pred)&#xff1a;线程调用此函数时&#xff0c;会原子性地释放锁并阻塞当前线程&#xff0c;等待另一个线程调用 notify_one 或…...

目标检测评价标准

主要借鉴&#xff1a;https://github.com/rafaelpadilla/Object-Detection-Metrics?tabreadme-ov-file 主要评价指标、术语&#xff1a; Intersection Over Union (IOU)&#xff1a;两个检测框交集面积与并集面积的比值 True Positive (TP)&#xff1a;IOU大于阈值的检测框…...

C51-- 蓝牙,WIFI模块

HC-08蓝牙模块: 蓝牙 -- 最好用的 串口透传 模块 透传 -- 透明传送&#xff0c;指的是在数据传输的过程中&#xff0c;通过无线的方式这组数据不发生任何形式的改变&#xff0c; 仿佛传输过程是透明的&#xff0c;同时保证传输质量&#xff0c;最终原封不动的传送到接收者手…...

HN热帖|替换Redis的一场赛跑

3 月 21 日&#xff0c; Redis Ltd. 宣布了一项重大决定&#xff1a;Redis “内存数据存储”项目从 Redis 7.4 版本开始将以非自由的、源代码可用的许可证发布。这一消息并不受欢迎&#xff0c;但也并非完全意外。这次的变化的不同寻常之处是市面上已经有了多个 Redis 替代品可…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...