У меня есть двоичный файл (test.bin), в котором есть 2 целых числа без знака соответственно 1000 и 4000.С помощью приведенного ниже кода я хочу изменить первое число на 5000 с первой функцией записи, а затем я хочу прочитать второе число и переписать его с 4000-2000 = 2000. Тем не менее, программа меняет 1000 на 5000, но это не меняет4000 до 2000. Даже если я использую file.flush () или file.sync (), это не имеет никакого эффекта.Интересно, что когда я ставлю file.tellg () или file.tellp (), он работает так, как я хочу.(Я выяснил это по стечению обстоятельств) Это происходит как в Linux, так и в Windows.В Linux я пытаюсь скомпилировать его с помощью g ++.sizeof (unsigned int) = 4, и я уверен, что программа может открыть test.bin.
#include <fstream>
#include <iostream>
using namespace std;
int main(){
fstream file;
unsigned int data, buffer;
data=5000;
file.open("test.bin", ios::binary | ios::in | ios::out);
file.write((char*)&data,4); // will change first number to 5000
// file.flush(); // Nothing changes if I delete comment signs.
// file.tellp(); // Program works correctly if I uncomment this.
// file.tellg(); // Program works correctly if I uncomment this.
file.read((char*)&buffer, 4); // position pointer should be at the beginning of the 2nd number
file.seekp(-4, ios::cur); // Since internal pointer is at the end of the file after the read(), I manually put it back to the beginning of the 2nd number.
buffer-=2000;
file.write((char*)&buffer,4); // Now, it should rewrite 2nd number with 2000.
file.close();
return 0;
}