¿Por qué la lectura y la escritura en un archivo binario que no está funcionando como se esperaba?

votos
-1

Estoy tratando de reemplazar un valor doble que se encuentra en el byte 32th en el archivo binario. En la configuración más adelante, el tamaño de MyStructes de 24 bytes. Por lo tanto, el byte 32th en el archivo debe ser la Weightvariable miembro de la segunda estructura. En este momento cuando yo haga, estoy consiguiendo la extraña salida. Estoy esperando mi segunda estructura para que el nuevo valor de peso de 250 en lugar de 200:

#include <iostream>
#include <fstream>

using namespace std;

struct MyStruct
{
    int Grade;
    double Weight;
    char Gender;
};

int main()
{
    MyStruct* lStruct = new MyStruct{ 1, 100, 'M' };
    MyStruct* lStruct2 = new MyStruct{ 2, 200, 'F' };;

    fstream InFile;
    InFile.open(test.txt, ios::in | ios::out | ios::binary);
    InFile.write(reinterpret_cast<char*>(lStruct), sizeof(MyStruct));
    InFile.write(reinterpret_cast<char*>(lStruct2), sizeof(MyStruct));


    InFile.seekp(32, ios::beg);
    double Weight = 250;
    InFile.write(reinterpret_cast<char*>(&Weight), sizeof(double));

    InFile.seekg(0, ios::beg);
    InFile.read(reinterpret_cast<char*>(lStruct), sizeof(MyStruct));
    InFile.seekg(24, ios::beg);
    InFile.read(reinterpret_cast<char*>(lStruct2), sizeof(double));

    cout << lStruct->Grade<< endl;
    cout << lStruct->Weight << endl;
    cout << lStruct->Gender<< endl;
    cout << endl;

    cout << lStruct2->Grade<< endl;
    cout << lStruct2->Weight << endl;
    cout << lStruct2->Gender<< endl;
    cout << endl;

    return 0;
}

Salida:

1

100

METRO

2

200

F

¿Cuál es el problema?

Pregunta extra: es seekp(32, ios::beg)equivalente a seekp(-16, ios::end)? (puedo usar negativo lejos del final)?

Publicado el 09/10/2019 a las 19:01
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more