C++ 从文件中读取一个类更改它并将其放回文件中 transactionfile.seekp(0,transactionfile.beg); transactionfile.seekg(0,transactionfile.beg); 而(!TransactionFile.eof()){ transactionfile.read((char*)&testrans,sizeof(Transaction)); 诱惑额=50; transactionfile.write((char*)&testrans,sizeof(Transaction)); } transactionfile.seekg(0,transactionfile.beg); 而(!TransactionFile.eof()){ transactionfile.read((char*)&testrans,sizeof(Transaction)); cout

C++ 从文件中读取一个类更改它并将其放回文件中 transactionfile.seekp(0,transactionfile.beg); transactionfile.seekg(0,transactionfile.beg); 而(!TransactionFile.eof()){ transactionfile.read((char*)&testrans,sizeof(Transaction)); 诱惑额=50; transactionfile.write((char*)&testrans,sizeof(Transaction)); } transactionfile.seekg(0,transactionfile.beg); 而(!TransactionFile.eof()){ transactionfile.read((char*)&testrans,sizeof(Transaction)); cout,c++,binaryfiles,C++,Binaryfiles,当您从文件读取时,它会将文件指针前进到下一个位置。 要写入您读取的同一记录,您需要备份到读取开始的位置并写入 transactionsFile.seekp(0,transactionsFile.beg); transactionsFile.seekg(0,transactionsFile.beg); while (!transactionsFile.eof()){ transactionsFile.read((char*) &tempTrans, sizeof(Transacti

当您从文件
读取
时,它会将文件指针前进到下一个位置。
要写入您读取的同一记录,您需要备份到读取开始的位置并写入

transactionsFile.seekp(0,transactionsFile.beg);
transactionsFile.seekg(0,transactionsFile.beg);
while (!transactionsFile.eof()){
    transactionsFile.read((char*) &tempTrans, sizeof(Transaction));
    tempTrans.amount = 50;
    transactionsFile.write((char*) &tempTrans, sizeof(Transaction));
}
transactionsFile.seekg(0,transactionsFile.beg);
while (!transactionsFile.eof()){
    transactionsFile.read((char*) &tempTrans, sizeof(Transaction));
    cout << tempTrans.transID <<" " << tempTrans.amount <<" "<< tempTrans.creditAcctID <<" "<< tempTrans.debitAcctID <<endl;
}   

编辑1:在读取后保存读取位置。在写入后恢复读取位置。

这很有帮助。但是有一个奇怪的问题。它让第一个和第二个类更改它们并将它们放回。但是从第二个类开始,读取在ame类上。写入在继续。无休止的循环…我编辑了我的答案。我在写入前恢复读取位置,然后在写入后恢复读取位置。
std::streampos    read_posn = transactionsFile.tellg();
while (transactionsFile.read((char*) &tempTrans, sizeof(Transaction)))
{
    std::streampos next_read_posn = transactionsFile.tellg();
    tempTrans.amount = 50;
    transactionsFile.seekp(read_posn);
    transactionsFile.write((char *) &tempTrans, sizeof(Transaction));
    transactionsFile.seekg(next_read_posn);
    read_posn = next_read_posn;
}