Android中C++层fstream用法详解
fstream用于读写文件内容
ifstream用于读文件内容
ofstream用于写内容到文件
读本文章前,请读一下C++ 文件和流 | 菜鸟教程
目录
1. 打开文件open
2. 返回当前指针位置tellg, tellp
3. 设置文件读位置指针seekg
4. 设置文件写位置指针seekp
5. 如何在文件的倒数第二行末尾插入数据
1. 打开文件open
#include <iostream>
#include <fstream>fstream ooStream;
ooStream.open("file.json", ios::out | ios::in);
if (!ooStream.is_open()) {//文件打开失败ALOGD("Can not open file");
} else {//文件打开成功ALOGD("open sccuess!");
}
ooStream.close();
open函数如下
void open(const char *filename, ios::openmode mode);
mode有以下几种类型
ios::in = 0x01, //供读,文件不存在则创建(ifstream默认的打开方式)
ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)
ios::ate = 0x04, //文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用
ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入 新的内容,指针位置总在最后
ios::trunc = 0x10, // 在读写前先将文件长度截断为0(默认)
ios::nocreate = 0x20, //文件不存在时产生错误,常和in或app联合使用
ios::noreplace = 0x40, //文件存在时产生错误,常和out联合使用
ios::binary = 0x80 //二进制格式文件
2. 返回当前指针位置tellg, tellp
g --- get
p --- put
tellg 和 tellp 函数不需要带参数,它返回当前定位指针的位置,也代表着输入流的大小.
3. 设置文件读位置指针seekg
g --- get
// 定位到 ooStream的第 n 个字节(假设是 ios::beg)
ooStream.seekg(n);// 定位到 ooStream的开头
ooStream.seekg( 0, ios::beg);// 把文件的读指针从 ooStream开头向后移 n 个字节
ooStream.seekg( n, ios::beg);
// 把文件的读指针从 ooStream当前位置cur向后移 n 个字节
ooStream.seekg( n, ios::cur );
// 把文件的读指针从 ooStream末尾往前移 n 个字节
ooStream.seekg( n, ios::end );
// 定位到 ooStream的末尾
ooStream.seekg( 0, ios::end );
4. 设置文件写位置指针seekp
p --- put
// 定位到 ooStream的第 n 个字节(假设是 ios::beg)
ooStream.seekp(n);// 把文件的写指针从 ooStream开头向后移 n 个字节
ooStream.seekp( n, ios::beg);// 把文件的写指针从 ooStream末尾往前移 n 个字节
ooStream.seekp( n, ios::end );
5. 如何在文件的倒数第二行末尾插入数据
网上很多方法,都是先读取文件所有内容,保存到一个list中,再在list倒数第二行新增数据,再将这个新的list作为新的内容写入到另一个新文件中,这对于大文件操作时很不友好,影响系统性能。
请注意如果使用seekp写入数据到文件时,写入的数据会覆盖后面的内容。
这适合最后一行规固定的,如果还需要最后一行,那就每次再将最后一行的内容再写入文件即可。
void writeDataToFile() {fstream ooStream;//由于是插入到指定位置,所以此处不能是ios::appooStream.open("file.json", ios::out | ios::in);if (!ooStream.is_open()) {//文件打开失败ALOGD("Can not open file");return;} else {ALOGD("open sccuess!");}//将文件读指针定位到文件末尾,假设文件末尾没有\nooStream.seekg(0, ios::end);//获取文件大小std::streampos fileSize = ooStream.tellp();long pos = (long)fileSize;while (pos > 0) {//每次减1,往前移动,寻找\nooStream.seekg(--pos);char c;//获取ooStream当前的字符是什么ooStream.get(c);//判断ooStream当前的字符是否是回车符if (c == '\n') {//是回车符,则退出循环,这就到了倒数第二行的末尾,注意倒数第一行没有回车符break;}}//将文件的写指针定位到pos,即第二行文件末尾ooStream.seekp(pos);//写数据ooStream << "write data";//关闭文件流ooStream.close();
}
相关文章:
Android中C++层fstream用法详解
fstream用于读写文件内容 ifstream用于读文件内容 ofstream用于写内容到文件 读本文章前,请读一下C 文件和流 | 菜鸟教程 目录 1. 打开文件open 2. 返回当前指针位置tellg, tellp 3. 设置文件读位置指针seekg 4. 设置文件写位置指针seekp 5. 如何在文件…...
git clone常见问题一览及解决方法
在使用Ubuntu下,终端运行git clone命令时会遇见许多问题,本文主要针对一些常见的问题进行整理。关于换源问题,推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述,ubuntu下个人使用发现体验良好&am…...
ArcGIS Pro 如何批量删除字段
在某些时候,我们得到的图层属性表内可能会有很多不需要的字段,如果挨个去删除会十分的麻烦,对于这种情况,我们可以使用工具箱内的字段删除工具批量删除,这里为大家介绍一下使用方法,希望能对你有所帮助。 …...
OG Trade在ZKX揭幕:一家基于Starknet的游戏化永续合约交易所
ZKX的 OG Trade通过内置游戏化和30分钟交易竞赛,为所有交易者创造机会,革新了永续合约交易模式。 2024年1月30日 — ZKX宣布推出OG Trade,这是一家基于Starknet的游戏化永续合约交易所,旨在满足短期交易者、高水平交易者和波段交易…...
ubuntu 22.04 安装redis并设置远程连接
ubuntu 22.04 安装redis并设置远程连接 1、基础安装 更新包: sudo apt update安装redis: sudo apt install redis-server安装完毕后会自动启动,查看状态: sudo systemctl status redis-server注意:如果你的服务器上仅用…...
MemcachedRedis构建缓存服务器
目录 Memcached&Redis构建缓存服务器 一、介绍 二、memcached 1、特点 2、服务框架 3.配置安装memcached 三、redis服务 1、介绍 2、特点 3、缓存 4、安装redis 5、数据持久化 6、redis主从配置 Memcached&Redis构建缓存服务器 一、介绍 许多Web应用都将…...
Python编辑开发 --- pycharm pro 中文
PyCharm Pro是一款专业的Python集成开发环境(IDE),由JetBrains公司开发。它为Python开发者提供了丰富的功能和工具,使得Python编程变得更加高效和便捷。PyCharm Pro具有智能代码编辑功能,能够自动完成代码、快速导航至…...
Linux的 .bashrc 有什么作用?
一、.bashrc 是什么? 有什么用? .bashrc是一个存储在你的home目录下的隐藏文件,它用来配置和自定义你的终端环境和行为。 每次你启动一个新的终端时,.bashrc文件就会被执行,加载你设置的环境变量,别名,函数…...
.ui文件相关
目录 ui类生成过程: 提问: 等以后自己熟练了用代码写这些样式内容,尽量用代码写,原因很简单: 用代码写的可以直接修改代码,但是在设计界面修改的东西,电脑没有QC这玩意,还真不好改…...
【DOCKER】docker 安装sonarque
安装docker 安装docker https://blog.csdn.net/BThinker/article/details/123358697 加入阿里云镜像 https://blog.csdn.net/TommyXu8023/article/details/113291112 { "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] }安装sonarqube ht…...
解决IDEA报错端口被占用的问题
遇到的解决方案通常是执行netstat -ano | findstr "8080" ,然后去关闭对应的进程 但是我遇到的是8080改成任意一个端口,都报错端口被占用,且使用上面的命令并不能查到对应的进程 网上找到的方案能解决我的问题,原链接所…...
IDEA:git 回滚本地提交-git 选择 Reset Current Branch to
前言 回滚提交到本地但是还没有 Push 上去的提交 选择我们要回滚的节点,然后点击 git 选择 Reset Current Branch to… 再选择 Hard 。当我们点击 Reset 的时候,代码就会回滚到单前选中的这个版本...
Docker核心教程
1. 概述 官网:https://docs.docker.com/ Docker Hub 网站:https://hub.docker.com/ 容器较为官方的解释: 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…...
React通用后台模板
一. 项目初始化 1. 创建项目 环境 npm init vite 打开package.json,参考以下各模块版本: "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^7.2.8", …...
【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图
写在前面:在哔哩哔哩上面找到的Axure自学教程0基础入门课程,播放量最高,5个多小时。课程主要分为4个部分,快速入门、动态面板、常用动效、项目设计。UP主账号【Song老师产品经理课堂】。做个有素质的白嫖er,一键三连必…...
day38_MySQL
今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些? Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。文件&…...
element ui组件 el-date-picker设置default-time的默认时间
default-time :选择日期后的默认时间值。 如未指定则默认时间值为 00:00:00 默认值修改 <el-form-item label"计划开始时间" style"width: 100%;" prop"planStartTime"><el-date-picker v-model"formData.planStart…...
###C语言程序设计-----C语言学习(8)## 斐波那契数列问题,素数问题,人数分配问题。
前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 今天,我们主要分享三个问题如何用C语言去求解,1.斐波…...
蓝桥杯 第 1 场 小白入门赛
目录 1.蘑菇炸弹 2.构造数字 3.小蓝的金牌梦 4.合并石子加强版 5.简单的LIS问题 6.期望次数 1.蘑菇炸弹 我们直接依照题目 在中间位置的数进行模拟即可 void solve(){cin>>n;vector<int> a(n1);for(int i1;i<n;i) cin>>a[i];int ans0;for(int i2;i…...
飞天使-linux操作的一些技巧与知识点5-expect与docker便捷命令
expect 主要使用场景不输入账户密码的多 yum install -y expect 则可以安装上 #!/usr/bin/expect -f set username “root” set password “123456” spawn /bin/bash send “cd /data/container/\r” expect "$ " # 等待命令提示符 send “git pull\r” expect…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
