C语言进阶指南(22)——文件管理函数

欢迎来到博主的专栏——C语言进阶指南
博主id:代码小豪

文章目录

    • 一、文件输入输出函数
      • fwrite
      • fread
    • 二、文件定位函数
      • 文件位置
      • fseek
      • ftell
      • rewind
    • 三、文件缓冲区
      • fflush

一、文件输入输出函数

这些函数用于文件流,主要功能是将一连串的数据输出或输入,所以用于二进制文件远远多于文本文件(毕竟计算机的数据都是二进制表示的)。

fwrite

在这里插入图片描述
fwrite的作用就将连续的数据(数组),输出到文件流中

fwrite的函数原型有四个参数

buffer是一个void的指针,实际应用时可以是任何一个可使用内存区域。
size是确定一个待上传的元素的大小,单位是字节。
count是确定这种元素(size字节的元素)有多少个。 stream是一个FILE
的指针,是一个已经打开的文件输入流。

fwrite的返回值是成功输出的元素个数。比如我指定输出的元素个数为5(count=5),但是实际输出了3个元素之后就发生错误了,那么此时函数的返回值是小于5的。

以下面代码为例,使用fwrite将一个int类型的数组输出至文件“data.bin”中(txt是文本文件的后缀名)

	FILE* pf = fopen("data.bin", "wb");//打开二进制文件的文件输出流
	//模式应该为"wb"
	int ret=fwrite(arr, sizeof(arr), 1, pf);
	if (ret != 1)//判断输出数据是否成功
	{
		perror("fwrite happen error");
		fclose(pf);
		exit(EXIT_FAILURE);
	}
	fclose(pf);
	return 0;

windows中的二进制文件是不能直接打开的,可以在打开方式中选择记事本打开。可以发现二进制文件难以用文本的形式读取。
在这里插入图片描述
但是使用vs可以查看二进制文件,将文件作为现有项添加进源文件中。双击查看二进制文件
在这里插入图片描述

fread

fread函数可以从文件输入流读取数据,通常读取的都是二进制文件的文本流。
在这里插入图片描述
fread函数原型有4个参数

buffer是一个void*的指针,是数据输入的目的地。
size是元素的大小
count是元素个数
stream是一个已经打开的文件输入流

以刚刚生成的data.txt文件为例。将里面的数据输入至一个int类型的数组中。

代码如下:

	int arr[10] = { 0 };
	FILE* pf = fopen("data.bin", "rb");//打开二进制文件的文件输入流
	//二进制文件的输入流的模式是"rb"
	int ret=fread(arr, sizeof(arr), 1, pf);
	if (ret != 1)
	{
		perror("fread happend error");
		fclose(pf);
		exit(EXIT_FAILURE);
	}
	fclose(pf);

二、文件定位函数

文件位置

文件流有文件位置,打开文件时,会将文件位置设置在文件的起始处(追加状态下,会将文件位置设置在末尾处)。随着对流的读取或者写入操作,文件位置会向后推动。

但是并非所有数据都是顺序读写的,某些程序需要具备在文件中跳跃式读写的能力。即可以在一处地方读写数据,再去另一处读写数据。

<stdio.h>包含了一部分修改文件位置的函数

fseek

在这里插入图片描述
fseek的函数原型有三个参数

stream是一个流,是待改变文件位置的那个流
offset是偏移量,即文件目标位置相对于指定位置的偏移字节数(为负往左偏移,为正往右偏移)
origin是指定位置。<stdio.h>规定了三个宏来作为这个参数的值
(1)SEEK_SET 文件的起始处
(2)SEEK_CUR 文件的当前位置
(3)SEEK_END 文件的末尾处

比如要将已经运行的文件位置调整为起始处

	FILE*pf=fopen("data.txt", "w");
	…………………………
	fseek(pf, 0L, SEEK_SET);//设置在文件起始处
	//偏移量为0的文件位置

将文件位置调整为末尾处

	fseek(pf, 0L, SEEK_END);

当然,也可以调整到任意一个位置,只要设计好偏移量和指定位置即可。

ftell

在这里插入图片描述

stream是需返回文件位置的文件

ftell以长整型返回当前的文件位置。由此可以使用ftell来提供给fseek函数作为参数调整文件位置

	long f_pos = ftell(pf);
	{
		//其他程序
	}
	fseek(pf, f_pos, SEEK_SET);

这样子就可以回到原先的当前文件位置

rewind

在这里插入图片描述

rewind函数会使文件位置回到起始处。

rewind(pf);

几乎等价于

fseek(pf,0L,SEEK_SET);

三、文件缓冲区

操作系统向磁盘输入数据和从磁盘读入数据都是比较慢的操作,如果每一次对磁盘的输入\输出都是直接访问的话,会对计算机的运行速度造成较大的影响。

因此使用文件缓冲的形式可以提升数据的读写速度。

将输出的数据存储在内存的缓冲区内,当缓冲区满了(或者一些操作)是,将缓冲区中的数据一次性输出至设备中)
输入的数据以相反的方式进行缓冲

在这里插入图片描述

当程序向文件中读取或写入数据时,数据先放入缓冲区中,当缓冲区满了或者关闭文件流时,缓冲区会将数据进行相应的“输出”。

如果想要提前将缓冲区的数据进行读写,可以使用fflush函数

fflush

在这里插入图片描述
使用fflush函数,可以使程序以我们所设定的频率使缓冲区中的数据进行输出

	fflush(pf);//使pf相关联的缓冲区进行输出
	fflush(NULL);//对所有的流进行输出

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

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

相关文章

python24.1.13for循环

对列表、字典、字符串等进行迭代 range

关系型数据库和MySQL概述

关系型数据库概述 数据持久化 - 将数据保存到能够长久保存数据的存储介质中,在掉电的情况下数据也不会丢失。数据库发展史 - 网状数据库、层次数据库、关系数据库、NoSQL 数据库、NewSQL 数据库。1970年,IBM的研究员E.F.Codd在_Communication of the ACM_上发表了名为_A Rela…

可盐可甜的红色马甲背心

膨体棉腈面料不易皱&#xff0c;搭配阿兰花菱形镂空设计 真的绝绝子&#xff0c;红色吸睛又美观 随便搭配一件衬衫去穿&#xff0c;自带文艺气息 氛围感直接拉满 出街拍照很出片&#xff0c;时髦又气质 女孩子的甜美&#xff0c;温柔等都可以突显 有喜欢的可以尝试一下哟…

Java课程设计团队博客 —— 基于网页的时间管理系统

博客目录 1.项目简介2.项目采用的技术3.功能需求分析4.项目亮点5.主要功能截图6.Git地址7.总结 Java团队博客分工 姓名职务负责模块个人博客孙岚组长 资源文件路径和tomcat服务器的相关配置。 前端的页面设计与逻辑实现的代码编写。 Servlet前后端数据交互的编写。 用户登录和…

数据结构实战:变位词侦测

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;逐个比较法1、编写源程序2、代码解释说明&#xff08;1&#xff09;函数逻辑解释&#xff08;2&#xff09;主程序部分 3、运行程序&#xff0c;查看结果4、计算时间复杂度 &#xff08;二&#xff09;排序比较法1…

windows server 2012、2019服务器定时重启

手动设置定时任务 1.开始菜单&#xff0c;找到“计划任务程序”; 如果无法创建基本任务的话&#xff0c;可能是系统中的“Task Scheduler”服务没有启动&#xff0c;你可在运行中键入“ services.msc”&#xff0c;查看“Task Scheduler”服务是否被设置成了“已禁用”&#x…

一个个人博客应该怎么学?

一个个人博客应该怎么学&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;复&…

哪个牌子的护眼台灯适合学生?2024护眼台灯推荐

不知道各位父母对孩子的视力健康有没有关注&#xff0c;我国儿童青少年的近视率高达52.7%&#xff0c;也就是说&#xff0c;平均是个儿童中就有五个儿童存在视力问题&#xff0c;而且近视发生年龄提前至3到7岁。作为一名眼部护理博主&#xff0c;孩子从小看书、看屏幕起&#x…

10分钟快速搭建个人博客、文档网站!

本文来分享 8 个现代化前端工具&#xff0c;帮你快速生成个人博客、文档网站&#xff01; VitePress VitePress 是一款静态站点生成器&#xff0c;专为构建快速、以内容为中心的网站而设计。简而言之&#xff0c;VitePress 获取用 Markdown 编写的源内容&#xff0c;为其应用…

爬虫实战丨基于requests爬取比特币信息并绘制价格走势图

文章目录 写在前面实验环境实验描述实验内容 写在后面 写在前面 本期内容&#xff1a;基于requests爬取比特币信息并绘制价格走势图 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88734451 实验环境 anaconda丨pycharmpython3.11.4requests 安装r…

3D scanner with DLPC3478

https://www.bilibili.com/video/BV1vJ411J7ih?p3&vd_source109fb20ee1f39e5212cd7a443a0286c5 因数&#xff1a; 分别率波长pattern速度 DMD 与 DLPC匹配 3D scanner是结构光的概念走的 Internal pattern, 是DLPC内部提供图像给DMD External Pattern, 外部FPGA /MCU…

计算n的平方根m 进而将m向下取整 math.isqrt()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算n的平方根m 进而将m向下取整 math.isqrt() 选择题 请问执行math.isqrt(10)的运行结果是&#xff1a; import math print("【执行】math.sqrt(10)") print (math.sqrt(10)) pr…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏

1&#xff1a;效果示例 2&#xff1a;代码示例&#xff1a; UnLockCell.java package com.example.juc.zhujie;/*** Author * Date Created in 2023/12/19 10:09* DESCRIPTION:* Version V1.0*/import java.lang.annotation.*;/*** 用于标记锁定哪些列不需要锁定* author 12…

VMware Workstation17安装教程及安装Ubuntu22.04系统

编程如画&#xff0c;我是panda&#xff01; 前言 VMware Workstation Pro 是一款高级虚拟化软件&#xff0c;使用户能够在单一计算机上同时运行多个操作系统&#xff0c;如Windows、Linux和macOS&#xff0c;而无需重新启动。具备虚拟机快照、高级网络配置、克隆和复制功能&a…

从源码分析 MySQL 身份验证插件的实现细节

最近在分析ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)这个报错的常见原因。 在分析的过程中&#xff0c;不可避免会涉及到 MySQL 身份验证的一些实现细节。 加之之前对这一块就有很多疑问&#xff0c;包括&#xff1a; 一个明文密码&…

机器学习基本算法:算法流程和算法分类

1、算法流程 机器学习的过程是一个完整的项目周期&#xff0c;其中包括数据的采集、数据的特征提取与分类&#xff0c;之后采用何种算法去创建机器学习模型从而获得预测数据。 算法流程 从上图可以看出一个完整的机器学习项目包含以下这些内容&#xff1a; 输入数据&#x…

小程序系列-5.WXML 模板语法

一、数据绑定 1、在 data 中定义页面的数据 动态绑定内容&#xff1a; 动态绑定属性&#xff1a; 2. Mustache 语法的格式 3. Mustache 语法的应用场景 4. 三元运算 5.算数运算 二、 事件绑定 1. 什么是事件&#xff1f; 2. 小程序中常用的事件 3. 事件对象的属性列表 4.…

玩转Mysql 六(MySQL数据存储结构)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MySQL数据存储结构解析 1、mysql数据存储结构的组成 ​ 从 InnoDB 逻辑存储结构来看&a…

将台式机变为服务器,服务器设置静态IP的方法

一.查看IP: 同时按winR&#xff0c;输入cmd&#xff0c;打开终端。输入 ifconfig查看IP地址 查看网关: route -n二、配置静态IP地址 进入root权限 sudo -i进入.yaml文件&#xff0c;开始配置静态IP地址 vim /etc/netplan /*.yaml文件地址是/etc/netplan/01-network-manager-…