Oppure

Loading
03/11/11 12:35
Postato originariamente da paco87:

il fatto è che i record hanno tutti la stessa lunghezza


Presupposto della seek è che i record *abbiano* la stessa lunghezza (in particolare la lunghezza è sizeof(dipendente) che tu usi nel tuo codice).

la file.read nn riesce a leggermi tutto il record


Se hai scritto il record con la file.write allora la file.read lo leggerà correttamente dopo essersi posizionata con la seekg.

Se scrivi il file in un altro modo, non puoi pretendere che la file.read funzioni (e tanto meno la seek)

e quando faccio ...


Tutti problemi legati al fatto che non hai scritto/letto con lo stesso metodo.
Se usi >> e << allora utilizza un file sequenziale. Altrimenti usi write, read e seek. Non un miscuglio.

Adesso, cancella il file, riscrivilo usando unicamente la write e rileggilo usando unicamente la read (e la seekg) e vedrai che funzionerà.
Ultima modifica effettuata da 03/11/11 15:23
03/11/11 19:15
Pitagora
esempio

Dipendete operaio( ID, "nome", "cognome" );
fstream myFile( "nome.estenzione", ios::in | ios::out | ios::binary );
if ( (void *) myFile )
{ .... errore .... }

// ti posizioni
myFile.seekp( ( ID - 1 ) * sizeof( Dipendente ), ios::beg );
myFile.write( reinterpret_cast< const char * >( &operaio ), sizeof( Dipendente ) );

Dipendete operaio2;
// ti riposizioni
myFile.seekg( ( ID - 1 ) * sizeof( Dipendete ), ios::beg );
myFile.read( reinterpret_cast< char * >( &operaio2 ), sizeof( Dipendete ) );

.....

Fai le tue riflessioni riguardo ID :k:
Ultima modifica effettuata da Pitagora 03/11/11 19:16
aaa
04/11/11 18:02
paco87
Grazie ai consigli di nessuno(:)) ora la seekg funziona, in effetti dovevo usare write e read per scrivere e leggere da file... graziee!!
aaa
04/11/11 18:19
Postato originariamente da paco87:

ora la seekg funziona


Diciamo che la seekg ha sempre funzionato ... basta usarla correttamente ...

Ciao