Domanda

sto sviluppando un'applicazione in Windows, e sto usando fstreams per leggere e scrivere il file.

che sto scrivendo con fstream aperto in questo modo:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

e la scrittura con questo comando

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

chiudere il file dopo ogni operazione di scrittura con

fs.close()

La lettura con ifstream aperto in questo modo:

is.open(filename, std::ios::in);

e la lettura con questo comando:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

La scrittura sta andando bene. Tuttavia, ho letto in un ciclo in questo modo:

while(!is.eof())
{
  is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

e il programma mantiene la lettura, anche se alla fine del file dovrebbe essere raggiunto. pos istellg è 0, e gcount è uguale a 0 anche, ma il bit non riescono e EOF po 'sono entrambi bene.

Io corro pazzo su questo, ha bisogno di aiuto ...

È stato utile?

Soluzione

Prova questo:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

Inoltre si dovrebbe aprire il istream con la bandiera binary così:

is.open(filename, std::ios::in | std:ios::binary);

Se si legge sempre, cosa leggere? Che tipo è T?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top