马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 两手空空儿 于 2023-2-6 19:20 编辑
我想向已存在内容的文件里写入内容(write()函数),在开头存放了一个计数,后面是数据,添加内容时更新计数,在文件最后追加新内容,总是完不成我想要的效果
ios::trunc, 这个参数说是会清空原来的内容,我试了,确实会
ios::out , 我用这个参数原来的内容也是会被清空。。。。。。。。。
ios::app , 用这个内容不会被清空,打开的时候tellp()是0,在开头的位置,但是写入总是会追加到文件最后,不能改变开头的计数
我应该怎么做呢????
//代码示例
#include <iostream>
#include <fstream>
#define FILENAME "test.txt"
using namespace std;
int main(void){
//模拟一个已存在的文件
int data = 5; //旧数据
int total = 1; //总数量为1
ofstream ofs(FILENAME, ios::trunc);
ofs.write((char*)&total, sizeof(total)); //在文件开头写入总数量1
ofs.write((char*)&data, sizeof(data)); //写入数据 5
ofs.close();
//文件被写入 1 5
//更改已有文件的内容
int newdata = 6; //要添加1个新数据
total = 2; //更改后的总数量为2
ofs.open(FILENAME, ios::out | ios::app);
cout << "打开后pos:" << ofs.tellp() << endl;
ofs.write((char*)&total, sizeof(total)); //想在文件开头写入更新的总数量2
ofs.seekp(0, ios::end); //定位到文件末尾
cout << "移到最后pos:" << ofs.tellp() << endl;
ofs.write((char*)&newdata, sizeof(newdata)); //写入新数据 6
ofs.close();
//我想要的结果是 2 5 6, 实际结果是 1 5 2 6
return 0;
}
//代码示例
#include <iostream>
#include <fstream>
#define FILENAME "test.txt"
using namespace std;
int main(void){
//模拟一个已存在的文件
int data = 53; //旧数据
int total = 49; //总数量为1
ofstream ofs(FILENAME, ios::trunc);
ofs.write((char*)&total, sizeof(total)); //在文件开头写入总数量1
ofs.write((char*)&data, sizeof(data)); //写入数据 5
ofs.close();
//文件被写入 1 5
//更改已有文件的内容
int newdata = 54; //要添加1个新数据
total = 50; //更改后的总数量为2
ofs.open(FILENAME, ios::out | ios::in); // 改了这一行
cout << "打开后pos:" << ofs.tellp() << endl;
ofs.write((char*)&total, sizeof(total)); //想在文件开头写入更新的总数量2
ofs.seekp(0, ios::end); //定位到文件末尾
cout << "移到最后pos:" << ofs.tellp() << endl;
ofs.write((char*)&newdata, sizeof(newdata)); //写入新数据 6
ofs.close();
//我想要的结果是 2 5 6, 实际结果是 1 5 2 6
return 0;
}
|