2011-11-21 24 views
15

Sto tentando di creare un gioco che implementa punteggi elevati in un file .txt. La domanda che ho è questa: quando faccio una dichiarazione come:Evita che i contenuti di un file esistente vengano sovrascritti durante la scrittura su un file

ofstream fout("filename.txt"); 

fa questo creare un file con quel nome, o semplicemente cercare un file con quel nome?

Il fatto è che ogni volta che avvia il programma di nuovo e fare la seguente dichiarazione:

fout << score << endl << player; 

sovrascrive i miei punteggi precedenti!

C'è un modo per far sì che i nuovi spartiti non sovrascrivano quelli vecchi quando scrivo nel file?

risposta

32

std::ofstream crea un nuovo file per impostazione predefinita. Devi creare il file con lo append parameter.

ofstream fout("filename.txt", ios::app); 
+3

solo per completezza, è 'std :: ios :: app'. poiché 'ios' è uno spazio dei nomi all'interno dello spazio dei nomi' std' –

13

Se si desidera semplicemente aggiungere alla fine del file, è possibile aprire il file in modalità di aggiunta, quindi qualsiasi scrittura viene eseguita alla fine del file e non sovrascrive il contenuto del file che esisteva in precedenza:

ofstream fout("filename.txt", ios::app); 

Se si desidera sovrascrivere una linea specifica di testo con dati invece di limitarsi a virare sulla fine con la modalità di aggiunta, è probabilmente stai meglio la lettura del file e l'analisi dei dati, quindi sistemarla (aggiungendo qualsiasi cosa, rimuovendo qualsiasi cosa, modificando qualsiasi cosa) e scrivendo tutto nuovamente nel file di nuovo.

+0

Leggere il file, l'analisi e la scrittura tutto torna non è una buona idea se i file sono molto grandi, sarà ovviamente prendere un sacco di potenza di calcolo se il file è dire, 100GB, per non parlare di RAM e disco velocità di lettura/scrittura. –