网站关键词排行查询,百度快照和广告的区别,山东网站建设运营,有什么网站做统计图的fstream用于读写文件内容
ifstream用于读文件内容
ofstream用于写内容到文件
读本文章前#xff0c;请读一下C 文件和流 | 菜鸟教程
目录
1. 打开文件open
2. 返回当前指针位置tellg, tellp
3. 设置文件读位置指针seekg
4. 设置文件写位置指针seekp
5. 如何在文件…fstream用于读写文件内容
ifstream用于读文件内容
ofstream用于写内容到文件
读本文章前请读一下C 文件和流 | 菜鸟教程
目录
1. 打开文件open
2. 返回当前指针位置tellg, tellp
3. 设置文件读位置指针seekg
4. 设置文件写位置指针seekp
5. 如何在文件的倒数第二行末尾插入数据 1. 打开文件open
#include iostream
#include fstreamfstream 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();
}