我有一个已创建的巨大文件。我需要在文件的开头写一些数据,同时保留文件的其他内容。以下代码会破坏现有文件。任何人都可以用正确的方法帮助我。
ofstream oFile(FileName,ios::out|ios::binary);
oFile.seekp(0);
oFile.write((char*)&i,sizeof(i));
oFile.write((char*)&j,sizeof(i));
oFile.close();
编辑: 基本上我想在不同的位置覆盖已经存在的文件的一些字节,包括start。我知道要写入的位置的字节地址。我的写不会改变文件大小。
我需要做一些与以下代码相同的工作:
int mode = O_RDWR;
int myFilDes = open (FileName, mode, S_IRUSR | S_IWUSR);
lseek (myFilDes, 0, SEEK_SET);
write (myFilDes, &i, sizeof (i));
write (myFilDes, &j, sizeof (j));
答案 0 :(得分:3)
你应该执行:
oFile.seekp(0);
执行写入之前。 ios :: ate意味着你要附加到文件中。
您还需要使用ios :: in而不是ios :: out。 ios :: out意味着你计划截断文件,这可能会产生无意义的后果。
这不直观
答案 1 :(得分:1)
您缺少ios::in
使用:
ofstream oFile(FileName,ios::out|ios::in|ios::binary);
答案 2 :(得分:0)
如果你想“插入”,你必须知道C ++看到的“文件”就像一个字节流...所以如果你有它:
| 1 | 5 | 10 | 11 | 2 | 3 |
你想在第一个位置插入数据(将你的位置设置为0),你将不得不移动文件的其余部分......