Lỗi ghi file mất dữ liệu cũ

Em đang thực hiện đồ án quản lý thư viện, viết hàm ghi file các đầu sách.
Đầu sách là danh sách tuyến tính có chứa mã ISBN, tên sách, tên tác giả, thể loại, số trang năm xuất bản và con trỏ danh mục sách trỏ đến các sách thuộc đầu sách tương ứng.
Danh mục sách là danh sách liên kết đơn có mã sách, vị trị của sách, trạng thái của sách(trạng thái 0, 1, 2 tương ứng với có thể cho mượn, đã có người mượn và thanh lý).
Vấn đề ở chỗ là hàm ghi file của em cho lần đầu nhập rất tốt nhưng đến những lần sau thì hàm vẫn ghi dữ liệu mới còn những dữ liệu cũ thì bị mất đi hoặc in ra ko đúng. Trước khi ghi vào file em đã cho đọc trong file có dữ liệu cũ ra bộ nhớ trong rồi mới nhập dữ liệu mới để ghi, em nghĩ là dữ liệu cũ cũng sẽ được ghi chung với dữ liệu mới do đã được đọc ra trước khi ghi ngược lại vào file nhưng kết quả không như em nghĩ.

Mong mọi người chỉ rõ chỗ sai giúp em ạ, em xin cảm ơn!
Đây là hàm ghi file của em:

void SaveFileDS(list &ds, int n, int number){ // ds là đầu sách, n là số lượng của đầu sách
	ofstream fout("DAUSACH.txt"); int j = 0;
	if(!fout.is_open()){
		cout<<"Khong mo duoc file"; exit(0);
	}
	else{
		for(int i=0;i<n;i++){
			fout << ds.nodes[i]->ISBN<<endl;
			fout << ds.nodes[i]->tensach<<endl;
			fout << ds.nodes[i]->tacgia<<endl;
			fout << ds.nodes[i]->theloai<<endl;
			fout << ds.nodes[i]->sotrang<<endl;
			fout << ds.nodes[i]->namxuatban<<endl;
			fout << number <<endl; // number là số lượng sách trong đầu sách.
			while(ds.nodes[i]->pDMS != NULL && j < number){ //pDMS là con trỏ danh mục sách

				fout<<ds.nodes[i]->pDMS->info.masach<<endl;
				fout<<ds.nodes[i]->pDMS->info.vitri<<endl;
				fout<<ds.nodes[i]->pDMS->info.trangthai<<endl;
				ds.nodes[i]->pDMS = ds.nodes[i]->pDMS->next;
				j++;
			}
			
		}
	}
	fout.close();
}

http://www.cplusplus.com/reference/fstream/ofstream/ofstream/

ofstream fout("DAUSACH.txt", std::ofstream::trunc);

Viết thế này để nó ném toàn bộ nội dung cũ đi, còn nếu để không thì nó mặc định là std::ofstream::out, tức là nó ghi đè lên dữ liệu cũ, nhưng không xóa dữ liệu cũ.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?