文件操作(下)

标题的顺序是接着之前写的,希望这篇博客对你有帮助


七. 随机读写函数

实际上,无论是读还是写,在一次调用顺序读写函数,文件指针会移到已经读过或者写过的下一个位置,从那个位置开始下一次读和写(在文件没有关闭的前提下,如果关闭了,文件指针会回到最开始的地方进行读写)

1. fseek

根据文件指针的位置和偏移量来定位文件指针

跳转网站

fseek - C++ Reference

注意事项:

  1. int fseek ( FILE * stream, long int offset, int origin )

返回类型 :int

     2. 参数 : stream , offset , origin

stream 是流的指针(适用于文件

offset 是距离 orgin 位置的偏移量(正数是向右偏移几格,负数是向左偏移几格)

origin 只有三种:

SEEK_SET : 文件指针回到起始位置

SEEK_CUR : 文件指针处于现在位置不动

SEEK_END : 文件指针回到文章的结尾位置

参数类型是 FILE * , long int , int

    3. 引用头文件

<stdio.h>


举例

文件的内容:

#include<stdio.h>
int main()
{
  FILE* pa = fopen("data.txt", "r");
  printf("%c", fgetc(pa));
  printf("%c", fgetc(pa));
  fseek(pa, -1, SEEK_CUR);
  printf("%c", fgetc(pa));
  fseek(pa, 3, SEEK_SET);
  printf("%c", fgetc(pa));
  fseek(pa, -1, SEEK_END);
  printf("%c", fgetc(pa));
  fclose(pa);
  pa = NULL;
 return 0;
}

运行结果:

画图分析:

第一次读取数据:

第二次读取数据:

第三次读取数据:

第四次读取数据:

第五次读取数据:

2. ftell

返回文件指针相对于起始位置的偏移量

跳转网站

ftell - C++ Reference

注意事项:

  1. long int ftell ( FILE * stream )

返回类型 :lonf int(返回的是偏移量)

     2. 参数 stream

stream 是流的指针(适用于文件

参数类型是 FILE *

     3. 引用头文件

<stdio.h>


举例

#include<stdio.h>
int main()
{
	char ch[] = "ss";
	FILE* pa = fopen("data.txt", "r");
	fseek(pa, -1, SEEK_END);
	int tmp = ftell(pa);
	printf("%d ", tmp);
	fclose(pa);
	pa = NULL;
	return 0;
}

运行结果:

画图分析:

3. rewind

让文件指针的位置回到文件的起始位置

跳转网站

rewind - C++ Reference

注意事项:

  1. void rewind ( FILE * stream )

返回类型 :void

     2. 参数 stream

stream 是流的指针(适用于文件

参数类型是 FILE *

   3. 引用头文件

<stdio.h>


举例

#include<stdio.h>
int main()
{
	char ch[] = "ss";
	FILE* pa = fopen("data.txt", "r");
	fseek(pa, -1, SEEK_END);
	rewind(pa);
	printf("%c ", getc(pa));
	fclose(pa);
	pa = NULL;
	return 0;
}

运行结果:

八. 文件读取结束的判定

文件读取结束有两者情况:

  • 正常的读到文件末尾而结束
  • 因为发生读取错误导致文件读取结束

判定导致文件读取结束原因的函数

1 . feof

当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束

跳转网站

feof - C++ Reference

注意事项:

  1. int feof ( FILE * stream )

返回类型 :int

     2. 参数 stream

stream 是流的指针(适用于文件

参数类型是 FILE *

    3. 引用头文件

 <stdio.h>

2 . ferror

当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束

跳转网站

ferror - C++ Reference

注意事项:

  1. int ferror ( FILE * stream )

返回类型 :int

     2. 参数 stream

stream 是流的指针(适用于文件

参数类型是 FILE *

    3. 引用头文件

<stdio.h>


feof 和 ferror 举例

#include<stdio.h>
int main()
{
	char ch[] = "ss";
	FILE* pa = fopen("data.txt", "r");
	while (getc(pa) != EOF)
	{
		;
	}
	if (ferror(pa))
	{
		printf("文件读取过程发生失败\n");
	}
	else if (feof(pa))
	{
		printf("文件正常遇到结尾\n");
	}
	fclose(pa);
	pa = NULL;
	return 0;
}

运行结果:

九. 文件缓冲区

缓冲文件系统 :

是指系统自动地在内存中为 程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才⼀起送到磁盘上。缓冲区的大小根据C编译系统决定的。

所以我们往文件里面写入数据时,立刻打开文件,不能确保一定能找当刚才的数据(如果想要获得数据,可以先刷新缓冲区)

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

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

相关文章

Jenkins插件安装失败时这么做就搞定啦!

1.网络或墙的问题导致插件下载安装失败 这种错误提示很明显&#xff0c;就是无法连接到插件下载地址&#xff0c;导致插件下载失败。 解决方法 为Jenkins更换源 点击Jenkins主页面左侧列表中【系统管理】—— 下拉找到【管理插件】 选择【高级】选项卡 替换最下方【升级站点…

JS基础之模块化

JS基础之模块化 JS模块化模块化前端发展 什么是模块&#xff1f;怎么定义模块化IIFE匿名函数自调用IIFE模式增强模块化的好处 JS模块化 模块化 JS DOM操作 代码规范管理的标准 不同模块间的管理模块内部自组织 标准bundler (模块构建工具) ESNext TS -> ES5 前端发展 生态 …

第二百一十六回 分享一种更新页面数据的方法

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建单例模式"相关的内容,本章回中将 分享一种更新页面数据的方法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍一种更新页…

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题

【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题 1&#xff09;安装 Maven-Helper 插件2&#xff09;Maven Helper 插件使用方法3&#xff09;Idea-Maven 可视化依赖树 1&#xff09;安装 Maven-Helper 插件 这里我们已经安装过了&#xff0c;如果没有安装过&#xff0c;点…

【JUC】三十一、AQS源码

&#x1f4d5;前置笔记&#xff1a;【AQS核心概念与核心类】 文章目录 1、ReentrantLock与AQS类的联系2、lock方法3、acquire方法4、源码分析Demo背景案例5、tryAcquire方法6、addWaiter方法7、acquireQueued方法8、unlock方法9、cancelAcquire方法 AQS是JUC的基石&#xff0c;…

智能优化算法应用:基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于寄生捕食算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.寄生捕食算法4.实验参数设定5.算法结果6.…

数字化技术助力英语习得 iEnglish成智慧化学习新选择

日前,美剧《老友记》中钱德勒的扮演者马修派瑞去世的消息引发不少人的回忆杀。《老友记》官方发文悼念马修派瑞:“对于马修派瑞去世的消息,我们深感悲痛,他是给我们所有人的真正礼物,我们的心和他的家人、爱人、所有的粉丝在一起。” 作为不少国人刷剧学习英语的首选,《老友记…

C语言-数组指针笔试题讲解(1)-干货满满!!!

文章目录 ▶️1.sizeof和strlen的对比&#x1f4af;➡️1.1 sizeof是什么&#xff1f;&#x1f4af;➡️1.2sizeof用法举例&#x1f4af;▶️1.3strlen是什么&#xff1f;&#x1f4af;▶️1.4 strlen函数用法举例&#xff1a;&#x1f4af;▶️1.5 strlen和sizeof的对比&#…

优化问题笔记(2)

目录 3. 约束优化问题的全局解3.1 凸优化问题3.2 二次优化问题3.3 无约束二次优化问题3.4 一个典型的二次等式约束二次优化问题 Reference 3. 约束优化问题的全局解 3.1 凸优化问题 局部解成为全局解的一类重要的优化问题是所谓凸优化问题. 我们称优化问题 ( f , D ) (f,\ma…

性能测试之全链路压测流量模型你了解多少

前言 现在全链路越来越火&#xff0c;各大厂商也纷纷推出了自己的全链路压测测试方案。特别是针对全链路压测流量模型&#xff0c;各家方案都有所不同。最近我看了一些这方面的资料&#xff0c;有一些感悟。分享给大家。 全链路压测流量模型的梳理呢&#xff0c;这里就先不讲…

Gemini Pro API 详细申请步骤

Gemini Pro API 详细申请步骤 什么是 Gemini ? 上周&#xff0c;谷歌发布了 Gemini&#xff08;双子座&#xff09;&#xff0c;它是谷歌最新、最强大的人工智能模型&#xff0c;旨在迎头痛击 OpenAI 的 GPT。Gemini 在构建时考虑到了多模态性&#xff0c;这意味着它能够理解…

【日常总结】连接Mysql,打开数据表非常慢

问题 Navicat 连接mysql时&#xff0c;第二次打开非常慢 原因 Mysql服务器端会定时清理长时间不活跃空闲的数据库连接&#xff0c;以此优化数据库的性能。 解决方案 数据库右键---编辑连接--高级---保持连接间隔30秒 带来的问题 每次打开Navicat时&#xff0c;设置设置自动…

2023-南京荣耀Honor最新探访-OPEN DAY,实况记录!

前言 金九银十的秋招季缓缓落幕&#xff01; 接完offer&#xff0c;博主也回归啦&#xff01;有幸带着公开公平的心态&#xff0c;给大家分享一波南京荣耀总部的实况解密&#xff01; 最基础的环境状况&#xff0c;有图有真相&#xff01;~上图~ 民以食为天-南京荣耀食堂&…

issue阶段的选择电路的实现

1-of-M的仲裁电路 为什么要实现oldest-first 功能的仲裁呢&#xff1f; 这是考虑到越是旧的指令&#xff0c;和它存在相关性的指令也就越多&#xff0c;因此优先执行最旧的指令&#xff0c;则可以唤醒更多的指令&#xff0c;能够有效地提高处理器执行指令的并行度,而且最旧的指…

MapReduce和Yarn部署+入门

看的黑马视频记的笔记 目录 1.入门知识点 分布式计算&#xff1a; 概念&#xff1a; 两种模式&#xff1a; MapReduce&#xff08;分布式计算&#xff0c;分散汇总模式&#xff09; 概念 执行原理 注&#xff1a; Yarn&#xff08;分布式资源调度&#xff09; 概述 Y…

Linux Mint 21.3 代号为“Virginia”开启下载

Linux Mint 团队今天放出了 Linux Mint 21.3 Beta ISO 镜像&#xff0c;正式版计划在今年圣诞节发布。 支持 在实验性支持 Wayland 之外&#xff0c;Cinnamon 6.0 版 Linux Mint 21.3 Beta 镜像还带来了其它改进&#xff0c;Nemo 文件夹管理器右键菜单支持下载相关操作。 Cin…

SpringBoot之分层解耦以及 IOCDI的详细解析

### 3.2 分层解耦 刚才我们学习过程序分层思想了&#xff0c;接下来呢&#xff0c;我们来学习下程序的解耦思想。 解耦&#xff1a;解除耦合。 #### 3.2.1 耦合问题 首先需要了解软件开发涉及到的两个概念&#xff1a;内聚和耦合。 - 内聚&#xff1a;软件中各个功能模块内…

机器学习---聚类(原型聚类、密度聚类、层次聚类)

1. 原型聚类 原型聚类也称为“基于原型的聚类” (prototype-based clustering)&#xff0c;此类算法假设聚类结构能通过一 组原型刻画。算法过程&#xff1a;通常情况下&#xff0c;算法先对原型进行初始化&#xff0c;再对原型进行迭代更新求解。著 名的原型聚类算法&#…

OneBlog Shiro 反序列化漏洞复现

0x01 产品简介 OneBlog 是一个简洁美观、功能强大并且自适应的Java博客。使用springboot开发,前端使用Bootstrap。支持移动端自适应,配有完备的前台和后台管理功能。 0x02 漏洞概述 OneBlog v2.2.2 及之前的版本存在 shiro 反序列化漏洞,该漏洞源于软件存在硬编码的 shir…

【数据结构和算法】盛最多水的容器

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;暴力枚举 2.2 方法二&#xff1a;双指针 三、代码 3.1 方法一&#xff1a;暴力…
最新文章