文件操作(下)

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


七. 随机读写函数

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

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.mzph.cn/news/232984.shtml

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

相关文章

liteflow规则引擎 执行Javascript脚本

LiteFlow规则引擎主要基于Java&#xff0c;而在Java中直接执行JavaScript脚本的功能相对有限。通常&#xff0c;Java并不直接支持JavaScript的执行。但是&#xff0c;你可以使用一些第三方库来实现在Java中执行JavaScript脚本的功能。 一个常见的选择是使用Nashorn引擎&#x…

inner join / left join / right join

inner join 1.语法 语法1&#xff1a;SELECT * FROM table1 INNER JOIN table2 ON table1.column table2.column; 语法2&#xff1a;SELECT * FROM table1,table2 WHERE table1.column table2.column; 2.查询方式及结果 &#xff08;1&#xff09;查询会对 table1 的每一行…

制作RK3568 ubuntu20.04桌面版镜像

平台 主控: RK3568 编译主机: Ubuntu 20.04 AMD64 目标版本: Ubuntu 20.04 概述 RK3568是极具性价比的高能国产“芯“ , 是Rockchip面向与AIOT和工业市场打造的一款高性能、低功耗、功能丰富的国产化应用处理器。采用四核64位Cortex-A55架构&#xff0c;主频高达2.0GHz&#x…

基于车载ESAM(ETC)系统设计(程序+原理图+PCB源文件+硬件资料+元器件清单等)方案

OBE-SAM 安全模块&#xff0c;通过车规 AEC-Q100 Grade1 认证。主要应用于 ETC&#xff08;不停车收费&#xff09;系统&#xff0c;内 嵌于车载设备 OBU 中。 OBE-SAM安全模块中保存了车辆相关信息&#xff0c;收费站出入口信息&#xff0c;以及交易记录等等&#xff0c;模块采…

MacBook磁盘清理妙招一:使用清理工具CleanMyMac X4.14.6中文版

笔记本电脑在是我们工作和生活中重要组成部分&#xff0c;磁盘清理是常有的事&#xff0c;而macbook作为其中的代表之一&#xff0c;也越来越受到人们的青睐。然而&#xff0c;如何进行macbook磁盘清理&#xff0c;也是许多人都会遇到的问题&#xff0c;特别是被提示“磁盘已满…

复习linux——安全加密

1.对称加密算法特性 常见对称加密算法&#xff1a;DES、AES 2.非对称加密特性 常见非对称加密算法&#xff1a;RSA、DSA、ECC 3.单向哈希算法特性 常见算法&#xff1a;md5、sha1、sha224、 常见工具&#xff1a;md5sum、openssl CA和证书 获取证书方法 自签名的证书&…

WeChatMsg中文版开源软件 提取导出微信聊天记录为文档-提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存

功能 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 支持导出视频、表情包 导出联系人到CSV 导出视频到HTML 导出表情包到HTML 显示和导出拍一拍等系统消息 说明 &#xff1a;如果出现闪退问题&#…

AMEYA360:海凌科个位数微安级功耗蓝牙WiFi模块 BLE5.2蓝牙+2.4G WiFi二合一

蓝牙WiFi模块优势 蓝牙技术大多用来做短距离的设备间通信&#xff0c;例如无线耳机和智能手环等产品&#xff0c;WiFi技术则为产品提供了相对更高速的长距离数据传输能力&#xff0c;适用于连接互联网和局域网。 在各种场景的实际应用中&#xff0c;会经常出现需要多个设备之间…

Linux命令行控制小米电源开关

飞灵科技产品 flyelf-tech.com&#xff0c;flyelf.taobao.com 最近有需求通过命令控制局域网内小米电源开关&#xff0c;以便于写脚本对产品进行反复上电的启动测试。参考了这篇文章&#xff1a;https://blog.csdn.net/2301_77209380/article/details/129797846 获取小米设备的…

化学性质Vamagloxistat乙醇酸氧化酶抑制剂 2408241-62-1科研

Vamagloxistatist&#xff0c;也被称为乙醇酸氧化酶抑制剂&#xff0c;是一种有机化合物&#xff0c;化学式为C35H42N6O6。它是一种药物化学成分&#xff0c;被应用于医药科研领域用。 Vamagloxistatist是一种具有高度活性的化合物&#xff0c;具有多种化学性质。它是一种弱酸…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密恢复

在计算机技术飞速发展的今天&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;极大地方便了企业的生产运营&#xff0c;为企业带来了更高的效率。但网络威胁无处不在&#xff0c;网络威胁手段随着计算机技术的不断发展也在不断增加。近期&#xff0c;云天数据恢复中…

C#拼接JSON

一、业务背景 最近项目需要与U8c对接&#xff0c;实现增删改查&#xff0c;借此机会&#xff0c;梳理一下C#解析Json字符串的问题。 这篇文章&#xff0c;先以新增接口为例。 二、新增接口 查看需要传入的json格式。 拼接json&#xff0c;无非就是{}和[]的来回嵌套。 首先&am…

node.js事件循环相关步骤

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它使用事件驱动、非阻塞式 I/O 模型&#xff0c;使其轻量和高效。Node.js 的核心特性之一是其事件循环机制。下面是对 Node.js 事件循环每个步骤的讲解&#xff1a; 1. 定时器阶段&#xff08;Timers Pha…

Java,自带的排序方法

假如定义了一个学生类&#xff0c;想根据学生的总分对学生进行排序 案例&#xff08;进去是Student类的定义&#xff0c;用ctrlf 搜Collection&#xff0c;可以找到具体应用&#xff09; Collection.sort(要排序的集合&#xff0c;new 一个比较器(){ 大括号里是让重写比较器的…

C++数据结构——二叉搜索树详解

目录 一&#xff0c;关于二叉搜索树 1.1 概念 1.2 基本结构 二&#xff0c;二叉搜索树接口实现 2.1 插入 2.2 查找 2.3 打印 2.4* 删除 三&#xff0c;二叉搜索树接口递归实现 3.1 查找 3.2 插入 3.3 删除 四&#xff0c;二叉搜索树的默认成员函数 五&#xff0c;…

Kotlin中object关键字的使用

定义 在 Kotlin 中&#xff0c;object 关键字可以用来声明对象。对象可以分为两种&#xff1a; 对象表达式&#xff1a;一种表达式&#xff0c;可以直接赋值给变量或常量。对象声明&#xff1a;一种类似于 Java 中的静态类的声明。 用途 对象可以用于以下场景&#xff1a; …

bootstap table表格, 获取当前点击的table元素在该行是第几个

背景 有这样一个需求, table表格中是统计数据, 要求点击每个单元格可实现导出统计的底层数据 数据都是可点击导出的, 思路 获取行bootstap 有个index参数, 所哟要获取当前行第几列, 要获取当前点击的table元素在其所在行中的位置&#xff08;即第几个&#xff09;&#xff…

【ARM 嵌入式 编译系列 4.3 -- GCC 编译设置 单个函数优化等级】

文章目录 设置特定函数的优化等级设置特定函数的优化等级 在使用 GCC (GNU Compiler Collection) 编译程序时,有时可能需要指定某个函数不要被编译器优化,以便进行调试或其他目的。GCC 提供了几种方法来防止对特定函数的优化。 最常用的方法是在函数声明前使用 __attribute…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象&#xff0c;需要被回收。 内存溢出和内存泄漏 内存溢出&#xff1a;经过垃圾回收之后&#xff0c;内存仍旧无法存储新创建的对象&#xff0c;内存不够溢出。 内存泄漏&#xff1a;又叫“存储泄漏”&#xff0…

MySQL数据库慢的原因

MySQL 慢的原因有很多&#xff0c;其中 IO 读写和并发请求是两个最常见的原因。 IO 读写 MySQL 数据库存储在磁盘上&#xff0c;因此数据查询需要先从磁盘读取数据&#xff0c;然后再进行处理。如果 IO 读写速度慢&#xff0c;就会导致数据查询速度变慢。 IO 读写速度慢的原…