gpt4 book ai didi

c++ - seekp() 以二进制模式替换部分文件时出现问题

转载 作者:行者123 更新时间:2023-11-28 08:33:23 26 4
gpt4 key购买 nike

我在以二进制模式替换文件的一部分时遇到了一些问题。出于某种原因,我的 seekp() 行没有将文件指针放在所需位置。现在它将新内容附加到文件末尾,而不是替换所需的部分。

long int pos;
bool found = false;
fstream file(fileName, ios::binary|ios::out|ios::in);

file.read(reinterpret_cast<char *>(&record), sizeof(Person));

while (!file.eof())
{
if (record.getNumber() == number) {
pos=file.tellg();
found = true;
break;
}

// the record object is updated here

file.seekp(pos, ios::beg); //this is not placing the file pointer at the desired place
file.write(reinterpret_cast<const char *>(&record), sizeof(Person));
cout << "Record updated." << endl;
file.close();

我做错了什么吗?

非常感谢。

最佳答案

我不明白你的 while() 循环是如何工作的。通常,您不应测试 eof(),而应测试读取操作是否有效。

以下代码将一条记录写入一个文件(该文件必须存在),然后覆盖它:

#include <iostream>
#include <fstream>
using namespace std;

struct P {
int n;
};

int main() {
fstream file( "afile.dat" , ios::binary|ios::out|ios::in);
P p;
p.n = 1;
file.write( (char*)&p, sizeof(p) );
p.n = 2;
int pos = 0;
file.seekp(pos, ios::beg);
file.write( (char*)&p, sizeof(p) );
}

关于c++ - seekp() 以二进制模式替换部分文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com