【文件操作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

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

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

相关文章

香港科技大学广州|数据科学与分析学域硕博招生宣讲会—天津大学专场

时间:2024年4月12日(星期五)14:00 地点:天津大学北洋园校区55楼B204 报名链接:https://www.wjx.top/vm/Q0cKTUI.aspx# 跨学科研究领域 *数据驱动的人工智能和机器学习 *统计学习和建模 工业和商业分析 *特定行业的数…

工艺品wordpress外贸主题

工艺品wordpress外贸主题 简约大气的wordpress外贸主题,适合做工艺品进出品外贸的公司官网使用。 https://www.jianzhanpress.com/?p5377

社交媒体市场:揭示Facebook的商业模式

在数字化时代,社交媒体已经成为人们生活中不可或缺的一部分。Facebook作为全球最大的社交媒体平台之一,其商业模式的运作方式对于了解社交媒体市场的发展趋势和影响力至关重要。本文将深入探讨Facebook的商业模式,剖析其运作机制,…

【Java面试题系列】基础篇

目录 基本常识标识符的命名规则八种基本数据类型的大小,以及他们的封装类3*0.10.3返回值是什么short s1 1; s1 s1 1;有什么错? short s1 1; s1 1;有什么错?简述&&与&的区别?简述break与continue、return的区别?Arrays类的…

微服务(基础篇-007-RabbitMQ部署指南)

目录 05-RabbitMQ快速入门--介绍和安装_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p65&vd_source60a35a11f813c6dff0b76089e5e138cc 1.单机部署 1.1.下载镜像 1.2.安装MQ 2.集群部署 2.1.集群分类 2.2.设置网络 视频地址: 05-Rab…

项目:USB键盘和鼠标的复合设备

我们的复合设备使用一个物理设备就可以完成多个功能。 使用复合设备同时完成USB键盘和鼠标功能,它的主要实现方式有两种, 第一个就是我们将多个设备描述符合并成一个,这个相对比较简单,我们只要根据相应的报告描述符处理数据就可…

Red Hat配置本地yum源

Red Hat配置本地yum源 创建本地源文件夹 mkdir -p /mnt/cdrom挂载镜像文件至指定的目录 mount /dev/cdrom /mnt/cdrom备份本地源 cp -rf /etc/yum.repos.d /etc/yum.repos.d_$(date %Y%m%d_%H%M%S)删除默认原本地源 rm -rf /etc/yum.repos.d/*配置本地源,创建…

一文涵盖所有工作中遇到的redis操作,让你从此学会redis

一文涵盖所有工作中遇到的redis操作,让你从此学会redis 本文会从基础篇到进阶篇,逐步来讲解redis和springboot的整合,如何去操作,以及他的作用。让你学会使用redis,爱上使用redis。 介绍redis 首先我们来介绍一下re…

如何在Linux系统运行RStudio Server并实现无公网IP远程访问【内网穿透】

文章目录 推荐 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

c++的学习之路:7、类和对象(3)

一、初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式,如下方代码就是初始化列表的方式。从图片可以看出这种方式也可以利用缺省初始化…

rs485自动收发电路

R/RO:receive/receive out,接收,连接单片机的 rx D/DI:drive/drive in,驱动,连接单片机的 tx 自动控制电路的目的就是在 tx 空闲(空闲为高并)时拉低 RE 和 DE,工作&…

紫光展锐P7885核心板详细参数介绍_5G安卓智能模块开发方案

紫光展锐P7885核心板采用了先进的6nm EUV制程工艺,集成了高性能的应用处理器和金融级安全解决方案,为用户带来了全新的性能体验。 P7885核心板搭载了先进的6nm制程工艺SoC P7885,其中包含四核A76和四核A55,主频可达2.7Ghz&#xf…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

Laya1.8.4 UI长按选择对应位置释放技能

需求: 需要实现拖拽摇杆选择技能释放位置,释放技能。 原理:首先拆分需求,分为两部分,UI部分和场景部分,UI部分需要实现长按效果,长按后又要有拖动效果,将官方文档的示例代码改了改…

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd 介绍containerd 安装方法二进制文件安装源码构建安装 注意事项说明 介绍 Containerd是一个工业标准的容器运行时,它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程,能管理主机系…

[人工智能] AI为农业赋能:智能灌溉系统

前言 人工智能(AI)在农业方面具有广泛的应用前景,这主要得益于其在数据处理、预测分析和决策优化等方面的优势。 农业生产涉及到大量的数据,包括土壤湿度、气温、降雨量、植物生长情况等。人工智能可以利用先进的数据处理技术&…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

IMU参数辨识及标定

IMU参数辨识及标定 一、标定参数分析 标定的本质是参数辨识。首先明确哪些参数可辨识,其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 IMU需要标定的参数主要是确定性误差和随机误差,确定性误差主要标定bias&#xff0…

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map,key为数值,value为其坐标 3、遍历二维数组元素,再在map中找该元素对应的value值(二维数组形式),倘若value.size为1,那直接返回-1&…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…