C++如何在文件的倒数第二行末尾插入数据

可以先了解下Android中C++层fstream用法详解-CSDN博客​​​​​​

网上很多方法,都是先读取文件所有内容,再在文件倒数第二行新增数据,再将所有内容写入到另一个新文件中,这对于大文件操作时很不友好,影响系统性能。

请注意如果使用seekp写入数据到文件时,写入的数据会覆盖后面的内容。这适合最后一行规固定的,如果还需要最后一行,那就再将最后一行的内容再写入文件即可。

cpp 复制代码
void writeDataToFile() {
	fstream ooStream;
    //由于是插入到指定位置,所以此处不能是ios::app
	ooStream.open("file.json", ios::out | ios::in);
	if (!ooStream.is_open()) {
		//文件打开失败
		ALOGD("Can not open file");
		return;
	} else {
		ALOGD("open sccuess!");
	}
	//将文件读指针定位到文件末尾,假设文件末尾没有\n
	ooStream.seekg(0, ios::end);
	//获取文件大小
	std::streampos fileSize = ooStream.tellp();
	long pos = (long)fileSize;
	while (pos > 0) {
		//每次减1,往前移动,寻找\n
		ooStream.seekg(--pos);
		char c;
		//获取ooStream当前的字符是什么
		ooStream.get(c);
		//判断ooStream当前的字符是否是回车符
		if (c == '\n') {
			//是回车符,则退出循环,这就到了倒数第二行的末尾,注意倒数第一行没有回车符
			break;
		}
	}
	//将文件的写指针定位到pos,即第二行文件末尾
	ooStream.seekp(pos);
	//写数据
	ooStream << "write data";
	//关闭文件流
	ooStream.close();
}
相关推荐
艾莉丝努力练剑2 分钟前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
jike_20265 分钟前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
郝学胜_神的一滴19 分钟前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
c++·后端
一只QAQ28 分钟前
c++项目
java·c++·算法
Chester_19991 小时前
CSP202206C.角色授权
开发语言·数据结构·c++·蓝桥杯
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】WebSocket & SSE 协议
网络·c++·websocket·网络协议·学习·面试
码匠许师傅1 小时前
【设计模式精讲】6.抽象工厂(Abstract Factory)
c++·设计模式
GKxx1 小时前
在 HarmonyOS 上从源码构建 GCC 16(gcc/g++ + libstdc++ + libsanitizer):完整记录
c++·华为·harmonyos·鸿蒙·gcc
晴天的雨.9921 小时前
类和对象下(内部类,匿名对象,对象拷贝时的编译器优化)
开发语言·c++·算法
always_TT1 小时前
【Python 字符串格式化:format() 方法】
android·开发语言·python