2011-11-21 38 views
15

Tôi đang cố gắng tạo một trò chơi thực hiện điểm số cao thành tệp .txt. Câu hỏi tôi có là: khi tôi đưa ra tuyên bố như:Tránh nội dung của một tệp hiện có được ghi đè khi ghi vào một tệp

ofstream fout("filename.txt"); 

Điều này có tạo tệp với tên đó hoặc chỉ tìm tệp có tên đó không?

Cái này là bất cứ khi nào tôi bắt đầu chương trình một lần nữa và đưa ra các tuyên bố sau đây:

fout << score << endl << player; 

nó ghi đè điểm trước đây của tôi!

Có cách nào để tôi thực hiện để các điểm mới không ghi đè lên các điểm cũ khi tôi ghi vào tệp không?

Trả lời

32

std::ofstream tạo tệp mới theo mặc định. Bạn phải tạo tệp bằng append parameter.

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

chỉ vì mục đích hoàn chỉnh, nó là 'std :: ios :: app'. vì 'ios' là một không gian tên bên trong không gian tên' std' –

13

Nếu bạn chỉ muốn chắp thêm vào cuối tệp, bạn có thể mở tệp ở chế độ chắp thêm, vì vậy mọi văn bản được thực hiện ở cuối tệp và không ghi đè lên nội dung của tệp đã tồn tại trước đó:

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

Nếu bạn muốn ghi đè lên một dòng cụ thể của văn bản với dữ liệu thay vì chỉ tacking chúng vào cuối cùng với chế độ phụ thêm, bạn có lẽ tốt hơn đọc các tập tin và phân tích các dữ liệu, sau đó sửa chữa nó lên (thêm bất cứ điều gì, loại bỏ bất cứ điều gì, chỉnh sửa bất cứ điều gì) và viết nó tất cả trở lại ra các tập tin mới.

+0

Đọc tệp, phân tích và viết mọi thứ trở lại không phải là ý tưởng hay nếu tệp của bạn rất lớn, rõ ràng sẽ mất rất nhiều công suất tính toán nếu tệp của bạn được nói, 100GB, chưa kể RAM và đĩa tốc độ đọc/ghi. –

Các vấn đề liên quan