2009-12-20 16 views
14

Come si ottiene il numero di byte letti con la funzione ifstream :: read?ifstream, byte letti?

Tell sta dicendo che il file è 10 byte e Windows dice che è anche 10 byte ma ci sono solo 8 byte nel file, quindi quando lo leggo, è solo la lettura degli 8 byte quindi finisco con troppo grande di un buffer

+1

Sei sicuro di non avere una nuova riga alla fine del file (ad esempio, '\ r \ n' su Windows)? Questo ti darebbe due byte mancanti. –

+0

Sì, l'ho provato con fopen, ecc. E ha restituito solo 8 byte in lettura. – user230821

risposta

34

È possibile scoprire chiamando gcount() su uno stream immediatamente dopo aver letto.

ifs.read(buf, sizeof buf); 
std::streamsize bytes = ifs.gcount(); 
2

C'è una funzione chiamata readsome(...) che fa quello che si vuole:

streamsize readsome (char* s, streamsize n); 

Valore di ritorno Il numero di caratteri estratti.

+6

'readsome' legge solo dal buffer di memoria associato al flusso, non leggerà necessariamente fino alla fine del file anche se il file è abbastanza grande. Non vuoi usarlo se non in circostanze molto limitate. – interjay

Problemi correlati