2013-06-10 23 views
7

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

5

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).

+0

Quindi 'stringstream' sarebbe preferibile per la gestione di un file di testo molto grande che volevo analizzare riga per riga? –

+0

Vedere [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline). – Casey

+1

@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. –

Problemi correlati