2011-11-21 23 views
15

Próbuję utworzyć grę, która implementuje wysokie wyniki do pliku .txt. Mam pytanie brzmi: kiedy złożyć oświadczenie takie jak:Unikaj zawartości istniejącego pliku, który ma zostać nadpisany podczas zapisu do pliku.

ofstream fout("filename.txt"); 

Czy to utworzyć plik o tej nazwie, lub po prostu zajrzeć do pliku o tej samej nazwie?

Chodzi o to, że ilekroć uruchomić program od nowa i zrobić następujące oświadczenie:

fout << score << endl << player; 

nadpisuje moje poprzednie wyniki!

Czy jest jakiś sposób, aby zrobić tak, aby nowe wyniki nie zastąpiły starych, gdy piszę do pliku?

Odpowiedz

32

std::ofstream tworzy domyślnie nowy plik. Musisz utworzyć plik z append parameter.

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

tylko ze względu na kompletność, jest to 'std :: ios :: app'. ponieważ 'ios' to przestrzeń nazw wewnątrz przestrzeni nazw' std' –

13

Jeśli chcesz po prostu dołączyć do końca pliku, możesz otworzyć plik w trybie dodawania, więc wszelkie zapisy są wykonywane na końcu pliku i nie zastępują zawartości pliku, który wcześniej istniał:

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

Jeśli chcesz zastąpić konkretną linię tekstu z danymi, a nie tylko ich sklejaniu na koniec z trybie dopisywania, jesteś prawdopodobnie lepiej odczytu pliku i analizowania danych, a następnie go naprawić górę (dodając cokolwiek, usuwając cokolwiek, edytując cokolwiek) i zapisując to wszystko z powrotem do pliku na nowo.

+0

Odczyt pliku, analizowanie i zapisywanie wszystkiego z powrotem nie jest dobrym pomysłem, jeśli pliki są bardzo duże, to oczywiście ma dużo mocy obliczeniowej, jeśli plik jest powiedzieć, 100GB, nie wspominając o pamięci RAM i dysk prędkość odczytu/zapisu. –