Non riesco a trovare una risposta chiara a un aspetto dell'oggetto fstream
necessario per determinare se vale la pena utilizzarlo. fstream
memorizza i suoi contenuti in memoria, o è più simile a un puntatore a una posizione in un file? Inizialmente utilizzavo CFile
e leggevo il testo in uno CString
, ma preferisco non avere l'intero file in memoria se posso evitarlo.Come funziona fstream? Memoria o file?
risposta
fstream
è l'abbreviazione di file stream
- di solito è una connessione a un file nel file system del sistema operativo host. (§27.9.1.1/1: "La classe basic_filebuf<charT,traits>
associa sia la sequenza di input che la sequenza di output con un file.")
Fa (normalmente) buffer alcune informazioni da quel file e se si sta lavorando con un file minuscolo, potrebbe accadere che tutto si adatti al buffer. In un caso tipico, tuttavia, la maggior parte dei dati sarà in un file su disco (o almeno nella cache dei file del sistema operativo) con una porzione relativamente piccola di esso (in genere alcuni kilobyte) nel buffer di fstream.
Se fatto consiglia di utilizzare un buffer nella memoria e lo hanno agire come un file, che normalmente si utilizza un std::stringstream
(o una variante, come std::istringstream
o std::ostringstream
).
- 1. std :: file fstream oltre 2gb
- 2. std :: fstream non crea file
- 3. Controlla se un fstream è un file o una directory
- 4. Ottenere nomefile (o percorso) da fstream
- 5. Come accodare a un file con fstream fstream :: flag di app sembra non funzionare
- 6. Creazione oggetto fstream da un puntatore FILE *
- 7. Errore fstream in C++
- 8. Come restituire un fstream (C++ 0x)
- 9. ifstream e ofstream o fstream using in e out
- 10. Utilizzo dell'oggetto fstream come parametro di funzione
- 11. fstream seekg(), seekp() e write()
- 12. Come funziona l'allocazione di memoria costante CUDA?
- 13. Fstream non riesce a creare un nuovo file
- 14. Recupero descrittore di file da uno std :: fstream
- 15. Come funziona C++/Qt - L'allocazione di memoria funziona?
- 16. Copia i dati da fstream a stringstream senza buffer?
- 17. ho bisogno di chiudere uno std :: fstream?
- 18. C equivalente alla sbirciatina di fstream
- 19. Apertura di fstream con file con nome file Unicode in Windows utilizzando il compilatore non MSVC
- 20. Inheritance JavaScript o come funziona?
- 21. Come posso leggere e scrivere caratteri non firmati in file con fstream in C++?
- 22. Come funziona davvero l'utilizzo della memoria PHP di apache?
- 23. Modo ottimale di leggere un file completo in una stringa usando fstream?
- 24. Come emulare l'I/O mappato in memoria
- 25. MongoDB - Memorizza i file nel DB o nella memoria esterna?
- 26. Utilizzo di std: fstream come negare l'accesso (lettura e scrittura) al file
- 27. I file mappati di memoria Linux riservano molta memoria fisica
- 28. Come funziona la gestione della memoria per le collezioni Scala?
- 29. C++ fstream - creazione di propri flag di formattazione
- 30. Come funziona limiti al lavoro di memoria condivisa su Linux
Quindi 'stringstream' sarebbe preferibile per la gestione di un file di testo molto grande che volevo analizzare riga per riga? –
Vedere [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey
@JoeMajsterski: no, probabilmente no. Solitamente un stringstream viene utilizzato come buffer temporaneo per (ad esempio) formattare i dati prima di essere visualizzato, o per leggere una riga alla volta dal file, quindi utilizzare 'stringstream' per analizzare i pezzi fuori dalla riga. –