文件操作(二)

 =͟͟͞͞🏀前言上一篇我们加们讲了什么是文件,为什么使用文件,以及流的概念。我们继续接上一篇来继续讲解我们的文件操作,这一篇将会详细的讲如何对文件进行读写。

目录

🚀一.文件的顺序读写

1.fgetc和fputc

2.fgets和fputs 

3. fscanf和fprintf 

4. fread和fwerite

✈️二.文件的随机读写 

1.fseek

2.ftell 

3.rewind 

🌈三.结言


🚀一.文件的顺序读写

在文件操作中我们如下几种方式进行读写:

函数名功能适用于
fgetc字符输入函数所有输入流
fputc字符输出函数所有输入流
fgets文本行输入函数所有输入流
fputs文本行输出函数所有输入流
fscanf格式化输入函数所有输入流
fprintf格式化输出函数

所有输入流

fread二进制输入文件
fwrite二进制输出文件

这些函数分别两两一组,下面来详细的介绍一下他们吧! 

1.fgetc和fputc

int character:像文件中传入的数据。

FILE * stream:指向文件的流。

FILE * stream:指向文件的流。

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror(fopen);
	}
	//文件操作
	char ch = 0;
	scanf("%c", &ch);
	fputc(ch, pf);
	//关闭文件
	fclose(pf);
    pf=NULL;
	return 0;
}

fputc就是向文件中输出一个指定的字符。而fgetc就是从文件中输出一个字符。

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
	}
	//文件操作
	char ch = 0;
	ch=fgetc(pf);
	printf("%c\n", ch);
	//scanf("%c", &ch);
	//fputc(ch, pf);
	//关闭文件
	fclose(pf);
    pf=NULL;
	return 0;
}

这就是fputc与fgetc的作用了。

2.fgets和fputs 

const char*str:像文件中输入文本的地址。

FILE * stream:指向文件的流。

char*str:接收文本的地址。

int num:接受文本的个数。

FILE * stream:指向文件的流。

fputs的使用:

int main()
{
	FILE* pf = fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror(fopen);
	}
	fputs("abcdef", pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

fgets的使用:

int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
	}
	char arr[10] = { 0 };
	fgets(arr,6,pf);
	printf("%s\n", arr);
	fclose(pf);
	pf = NULL;
	return 0;
}

3. fscanf和fprintf 

看到这一对函数我们是不是首先就想到了我们常用的scanf和printf那他们有什么区别呢?

 可以看到相比之下fprintf多了一个参数也就是我们上面提到的指向文件的流。那么使用的话只需要在前面加上这个参数即可。 

fprintf的使用:

struct stu
{
	char name[20];
	int age;
	float score;
};
int main()
{
	struct stu stu1 = { "zhangsan",18,90.5 };
	FILE* pf=fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fprintf(pf, "%s %d %.1f", stu1.name, stu1.age, stu1.score);
	fclose(pf);
	pf = NULL;
	return 0;
}

我们可以看到fprintf就是将一个格式化的东西向文件中输出,那么fprintf也就是从文件向外面输出了。 

同样也是fscanf多了我们上面提到的指向文件的流。

fscanf的使用:

struct stu
{
	char name[20];
	int age;
	float score;
};

int main()
{
	struct stu s = { 0 };
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fscanf(pf, "%s %d %f", s.name, &(s.age),&(s.score));
	fprintf(stdout, "%s %d %.1f", s.name, s.age, s.score);
	return 0;
}

4. fread和fwerite

 const void * ptr:输入内容的地址。

size_t size:单个输入内容的大小。

size_t count:输入内容的数量。

 FILE * stream:指向文件的流。

 void * ptr:输出内容的地址。

size_t size:单个输出内容的大小。

size_t count:输出内容的数量。

FILE * stream:指向文件的流。

他们两个也就是对二进制进行的文件操作函数。

fwrite的使用:

struct stu
{
	char name[20];
	int age;
	float score;
};

int main()
{
	struct stu stu1 = { "zhangsan",18,90.5 };
	FILE* pf=fopen("test.txt", "w");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fwrite(&stu1, sizeof(stu1), 1, pf);
	fclose(pf);
	pf = NULL;
	return 0;
}

 我们可以看到文件出现了一些看不懂的乱码(由于字符的二进制储存与文本储存方式相同都是一ASCII码的形式),也就是说这就是以二进制存储的内容。 

fread的使用:

struct stu
{
	char name[20];
	int age;
	float score;
};

int main()
{
	struct stu s = { 0 };
	FILE* pf = fopen("test.txt", "rb");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fread(&s,sizeof(s),1,pf);
	printf("%s %d %.1f", s.name, s.age, s.score);
	fclose(pf);
	pf = NULL;
	return 0;
}

✈️二.文件的随机读写 

说到随机我们可能会想到我们的rand函数,产生一个随机数。那么我们的随机读写是在任意一个地方去读写吗?其实不是的,随机读写指的是有很大的主观性,我们可以在我们想要读写的地方读写。接下来我们会认识到三个函数分别是fseek,ftell以及rewind。

1.fseek

 FILE * stream:指向文件的流。

long int offest:偏移量。

int origin:偏移的地点。(第二张图片的内容)

SEEK_SET:文件起始位置。

SEEK_CUR:光标所在的位置。

SEEK_END;文件末尾位置。

int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fseek(pf,2, SEEK_SET);
	int ch = fgetc(pf);
	printf("%c\n", ch);
	return 0;
}

2.ftell 

在了解了我们的fseek函数之后我们应该怎么去找我们的光标在哪里呢?或者是说偏移量是多少?我们的ftell函数也就整好解决了这个问题。

ftell:返回⽂件指针相对于起始位置的偏移量。

这个函数就简单多了只有一个流的参数。

ftell的使用:

int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fseek(pf,2, SEEK_SET);
	int ch = fgetc(pf);
	int count = ftell(pf);
	printf("%c\n", ch);
	printf("count的值是%d\n", count);
	return 0;
}

3.rewind 

这个函数与ftell的参数的相同。作用是将光标回到文件的起始位置。

rewind的使用:

int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror(fopen);
		return 1;
	}
	fseek(pf,2, SEEK_SET);
	int ch = fgetc(pf);
	int count = ftell(pf);
	printf("%c\n", ch);
	printf("count的值是%d\n", count);
	rewind(pf);
	count = ftell(pf);
	printf("rewind之后count的值是%d\n", count);
	return 0;
}

🌈三.结言

我们的文件操作大体就介绍完了,如果有喜欢的可以三连哦!!欢迎大家互相探讨,博主会经常发布一些编程语言上的知识以及题,感谢大家的支持!!  =͟͟͞͞💌=͟͟͞͞💌=͟͟͞͞💌

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle—IMU机制

正常的情况下,当事务需要回滚块的时候,是去undo表空间找 现在是在sharepool中分一个IMUbuffer,将所有的回滚信息写入。直接就可以从中取。减少了物理IO 同时这个过程也产生redo,直接就是图中红色的,不防止崩溃 优点 1…

Java21 + SpringBoot3集成WebSocket

文章目录 前言相关技术简介什么是WebSocketWebSocket的原理WebSocket与HTTP协议的关系WebSocket优点WebSocket应用场景 实现方式1. 添加maven依赖2. 添加WebSocket配置类,定义ServerEndpointExporter Bean3. 定义WebSocket Endpoint4. 前端创建WebSocket对象 总结 前…

Java 树形结构数据生成导出excel文件V2

** >> 相对于V1版本&#xff0c;优化了代码逻辑&#xff0c;合理使用递归计算树数据的坐标 << ** 1、效果 2、使用方法 import com.alibaba.fastjson.JSONArray; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workboo…

Shiro框架:Shiro登录认证流程源码解析

目录 1.用户登录认证流程 1.1 生成认证Token 1.2 用户登录认证 1.2.1 SecurityManager login流程解析 1.2.1.1 authenticate方法进行登录认证 1.2.1.1.1 单Realm认证 1.2.1.2 认证通过后创建登录用户对象 1.2.1.2.1 复制SubjectContext 1.2.1.2.2 对subjectContext设…

【如何在 GitHub上面找项目】【转载】

很多的小伙伴&#xff0c;经常会有这样的困惑&#xff0c;我看了很多技术的学习文档、书籍、甚至视频&#xff0c;我想动手实践&#xff0c;于是我打开了GitHub&#xff0c;想找个开源项目&#xff0c;进行学习&#xff0c;获取项目实战经验。这个时候很多小伙伴就会面临这样的…

【数据结构 | 直接选择排序】

直接选择排序 基本思路直接插入排序SelectSort 基本思路 直接插入排序&#xff08;StraightInsertionSort&#xff09;的基本操作是将一个记录插入到已经排好序的有序表中&#xff0c;从而得到一个新的、记录数增1的有序表。 我们可以同时从数组的头部和尾部同时进行排序工作…

Pandoc:markdown转word

简介&#xff1a;Pandoc是由John MacFarlane开发的标记语言转换工具&#xff0c;可实现不同标记语言间的格式转换&#xff0c;堪称该领域中的“瑞士军刀”。Pandoc使用Haskell语言编写&#xff0c;以命令行形式实现与用户的交互&#xff0c;可支持多种操作系统&#xff1b;Pand…

IP-Adapter:用于文本到图像扩散模型的文本兼容图像提示适配器

文章目录 一、IP-Adapter简介二、IP-Adapter与img2img的区分&#xff08;一&#xff09;结构上的区别&#xff08;二&#xff09;流程上的区别&#xff08;三&#xff09;输出上的区别&#xff08;四&#xff09;原理上的区别 三、IP-Adapter的网络架构&#xff08;一&#xff…

自定义C#类库(.dll文件)

环境配置 操作系统&#xff1a;Windows 10 开发工具&#xff1a;Visual Studio 2022 .Net桌面开发环境&#xff1a; 开发步骤 &#xff08;一&#xff09;创建C#类库项目 &#xff08;二&#xff09;配置项目名称和项目路径 &#xff08;三&#xff09;选择所使用的框架&a…

ES数据聚合

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…

PDF 文档解除密码

PDF 文档解除密码 1. 文件 -> 文档属性 -> 安全 -> 文档限制摘要2. PDF365References 1. 文件 -> 文档属性 -> 安全 -> 文档限制摘要 密码保护《算法设计与分析基础_第3版.pdf》 2. PDF365 https://www.pdf365.cn/ 免费功能 -> PDF 去密码 开始去除 Re…

PVE虚拟机配置文件恢复

一、pve 创建的虚拟机的配置文件位置 在宿主机的 /etc/pve/qemu-server&#xff0c;这里有创建虚拟机的相关硬件信息。 rootpve1:/etc/pve/qemu-server# pwd /etc/pve/qemu-server二、故障现象 在命令行执行qm list不显示虚拟机&#xff0c;查看 宿主机的 /etc/pve/qemu-ser…

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

题目要求&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入…

mysql原理--undo日志2

1.概述 上一章我们主要唠叨了为什么需要 undo日志 &#xff0c;以及 INSERT 、 DELETE 、 UPDATE 这些会对数据做改动的语句都会产生什么类型的 undo日志 &#xff0c;还有不同类型的 undo日志 的具体格式是什么。本章会继续唠叨这些 undo日志 会被具体写到什么地方&#xff0c…

LabVIEW利用视频分析实现高效硬度测量

LabVIEW利用视频分析实现高效硬度测量 在材料硬度测量领域&#xff0c;自动化和高精度测试技术的需求不断上升。布氏硬度机的自动化测量系统&#xff0c;尤其是那些结合了LabVIEW视频识别和处理技术的系统&#xff0c;正日益成为行业的焦点。介绍一个使用LabVIEW软件和先进的视…

mysql-实战案例 (超详细版)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

用通俗易懂的方式讲解:大模型 RAG 技术,从入门到精通

本文基于IVAN ILIN发布于Towards AI的博客[1]进行总结归纳&#xff0c;感谢原作者的精彩讲解。 检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;简称RAG&#xff09;为大型语言模型&#xff08;LLMs&#xff09;提供了从某些数据源检索到的信息&#xff0…

svn spring项目增量打包工具

svn spring项目增量打包工具 前提介绍 项目使用svn &#xff0c;打包方式为war包&#xff0c;开发工具ide 项目有时候更新功能只需要更新部分class和html文件&#xff0c;但是要每个都打包并不是很简单 听说idea有现成的插件可以实现这个功能&#xff0c;但是我没找到&…

PPT插件-大珩助手-保留原素材的位置和大小一键替换

保留原素材的位置和大小一键替换 若勾选了一键替换&#xff0c;对于从素材库插入的图形&#xff0c;可以使得它的位置、大小与幻灯片中选中的形状一致 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持W…

软件测试|QtDesigner配置以及使用

简介 上一篇文章我们介绍了PyQt5环境的安装和配置&#xff0c;并且安装了Qt tools工具&#xff0c;本文我们将介绍如何使用Qt tools的QtDesigner如何使用。 QtDesigner 的启动和入门 打开我们的项目从顶部菜单栏选择&#xff1a;Tools -> ExternalTools -> QtDesigner…
最新文章