Mi chiedevo se esistesse un modo per reimpostare lo stato di eof in C++?Ripristino dello stato di fine file di un oggetto ifstream in C++
risposta
Per un file, è possibile cercare in qualsiasi posizione. Ad esempio, per riavvolgere l'inizio:
std::ifstream infile("hello.txt");
while (infile.read(...)) { /*...*/ } // etc etc
infile.clear(); // clear fail and eof bits
infile.seekg(0, std::ios::beg); // back to the start!
Se già leggere oltre la fine, è necessario ripristinare i flag di errore con clear()
come suggerisce @Jerry Coffin.
Ho provato questo, e funziona solo se 'clear' è chiamato * prima *' seekg'. Vedi anche qui: http://cboard.cprogramming.com/cplusplus-programming/134024-so-how-do-i-get-ifstream-start-top-file-again.html – Frank
@Frank: Grazie, modificato. Suppongo che non si possa operare su un flusso fallito del tutto, il che ha senso. –
Per i lettori in ritardo: in base a [riferimento cpp] (http://en.cppreference.com/w/cpp/io/basic_istream/seekg), la cancellazione non è più necessaria poiché C++ 11 ... – Aconcagua
Presumibilmente si intende su un iostream. In questo caso, lo stream clear()
dovrebbe eseguire il lavoro.
Sono d'accordo con la risposta sopra, ma ho incontrato questo stesso problema stasera. Così ho pensato di postare del codice che è un po 'più tutorial e mostra la posizione del flusso in ogni fase del processo. Probabilmente avrei dovuto controllare qui ... PRIMA ... ho passato un'ora a capirlo da solo.
ifstream ifs("alpha.dat"); //open a file
if(!ifs) throw runtime_error("unable to open table file");
while(getline(ifs, line)){
//......///
}
//reset the stream for another pass
int pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: -1 tellg() failed because the stream failed
ifs.clear();
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 7742'ish (aka the end of the file)
ifs.seekg(0);
pos = ifs.tellg();
cout<<"pos is: "<<pos<<endl; //pos is: 0 and ready for action
//stream is ready for another pass
while(getline(ifs, line) { //...// }
- 1. Ripristino dello Stato di un flusso
- 2. C++, lettura di un file utilizzando ifstream
- 3. Ripristino dello stato del programma da un file principale
- 4. ripristino dello stato di recupero password
- 5. CheckBox Android - Ripristino dello stato dopo la rotazione dello schermo
- 6. Salvataggio dello stato di WebView e ripristino in ANDROID
- 7. Ripristino dello stato di webview che contiene HTML generato dinamicamente
- 8. Come funziona il ripristino dello stato di iOS 6 UIWebView?
- 9. Aggiornamento dello stato di Twitter in C#
- 10. stato del negozio/nodi espansi di un jtree per il ripristino dello stato
- 11. Controllo del database in stato di ripristino
- 12. C++ Funzione ifstream e separatori di campo
- 13. freopen: ripristino dello stream originale
- 14. Ripristino stato con più storyboard
- 15. Ripristino stato OpenGL
- 16. iOS 6 Salvataggio/ripristino dello stato delle applicazioni
- 17. onCreateOptionsMenu androide chiamato due volte durante il ripristino dello stato
- 18. Salvataggio dello stato CryptoJD di CryptoMD5 come stringa e ripristino successivo
- 19. Ripristino Android istanza dello stato di un frammento che si trova nel backstack
- 20. Trova la fine del flusso per cin & ifstream?
- 21. iteratore bidirezionale su file/ifstream
- 22. Schede di navigazione Android: ripristino dello stato di visualizzazione dei frammenti
- 23. Ricerca in file di grandi dimensioni con ifstream
- 24. Integrazione dello stato di Erlang e C/C++?
- 25. Mantenimento dello stato finale alla fine dell'animazione CSS3
- 26. Ripristino stato dopo processo ucciso
- 27. Creazione di un oggetto in base allo stato di un altro oggetto in Java
- 28. C++ ifstream failbit e badbit
- 29. Viste di conservazione dello stato e contenitore di iOS
- 30. Come restituire un ifstream indietro all'inizio di una riga che è stata appena letta in C++?
di un file ifstream. –