2011-09-04 70 views
6

i m gặp sự cố khi ghi đè một số dữ liệu trong một tệp bằng C++. mã tôi đang sử dụng làGhi đè dữ liệu ghi đè C++ trong một tệp tại một vị trí cụ thể

int main(){ 
    fstream fout; 
    fout.open("hello.txt",fstream::binary | fstream::out | fstream::app); 
    pos=fout.tellp(); 
    fout.seekp(pos+5); 
    fout.write("####",4); 
    fout.close(); 
    return 0; 

}

vấn đề được ngay cả sau khi sử dụng seekp, dữ liệu luôn luôn được viết tại end.I muốn viết nó ở một vị trí cụ thể. Và nếu tôi không thêm fstream :: app, nội dung của tập tin sẽ bị xóa. Cảm ơn.

+0

Vị trí chính xác của dữ liệu bạn muốn ghi đè là gì? – Flinsch

Trả lời

8

Sự cố xảy ra với fstream::app - nó mở tệp để thêm vào, nghĩa là tất cả các bài viết sẽ được chuyển đến cuối tệp. Để tránh xóa nội dung, hãy thử mở bằng fstream::in, nghĩa là mở bằng fstream::binary | fstream::out | fstream::in.

+0

nhưng không phải là fstream :: để đọc từ luồng, làm cách nào tôi có thể ghi vào luồng bằng cách sử dụng? – karyboy

+2

Nếu bạn sử dụng cả «fstream :: in' và' fsteam :: out', bạn sẽ mở tệp để đọc và viết - nghĩa là nó sẽ được mở để viết mà không xóa nội dung trước đó. –

+0

Thanx mate, u r a savior ..... – karyboy

2

Bạn muốn một cái gì đó giống như

fstream fout("hello.txt", fstream::in | fstream::out | fstream::binary); 
fout.seek(offset); 
fout.write("####", 4); 

fstream::app nói với nó để di chuyển đến cuối của tập tin trước mỗi hoạt động sản xuất, vì vậy ngay cả khi bạn rõ ràng tìm đến một vị trí, địa điểm ghi được buộc phải chấm dứt khi bạn làm theo số write() (nghĩa là seekp(0, ios_base::end);).

cf. http://www.cplusplus.com/reference/iostream/fstream/open/

Một điều cần lưu ý là, vì bạn đã mở tệp với fstream::app, tellp() nên trả lại phần cuối của tệp. Vì vậy, seekp(pos + 5) nên cố di chuyển vượt quá vị trí tệp hiện tại.

+0

thnk u u quá cho chỉ ra rằng .... bây giờ tất cả mọi thứ làm việc như dự định .. – karyboy

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