Bạn có thể ghi đè mọi ký tự mà bạn muốn xóa bằng '\x7f'
. Sau đó, khi đọc trong tập tin, người đọc của bạn bỏ qua nhân vật đó. Điều này giả định rằng bạn có một tệp văn bản không bao giờ sử dụng ký tự DEL
, tất nhiên.
std::istream &
my_getline (std::istream &in, std::string &s,
char del = '\x7f', char delim = '\n') {
std::getline(in, s, delim);
std::size_t beg = s.find(del);
while (beg != s.npos) {
std::size_t end = s.find_first_not_of(del, beg+1);
s.erase(beg, end-beg);
beg = s.find(del, beg+1);
}
return in;
}
Khi Henk chỉ ra, bạn có thể chọn một nhân vật khác làm DELETE
. Tuy nhiên, lợi thế là kỹ thuật này hoạt động bất kể bạn muốn loại bỏ dòng nào (nó không bị giới hạn ở dòng đầu tiên), và không yêu cầu sử dụng hệ thống tệp.
Sử dụng trình đọc đã sửa đổi, bạn có thể định kỳ "chống phân mảnh" tệp. Hoặc, quá trình chống phân mảnh có thể xảy ra một cách tự nhiên khi nội dung được truyền trực tuyến/hợp nhất thành một tệp khác hoặc được lưu trữ vào một máy khác.
Chỉnh sửa: Bạn không nói rõ, nhưng tôi đoán đây là một số loại ứng dụng ghi nhật ký, trong đó mục tiêu là đặt giới hạn trên vào kích thước tệp nhật ký. Tuy nhiên, nếu đó là mục tiêu, sẽ dễ dàng hơn nhiều khi chỉ sử dụng một tập hợp các tệp nhật ký nhỏ hơn. Giả sử bạn duy trì khoảng 10MB tệp nhật ký, với tổng số nhật ký bị chặn đến 4GB. Vì vậy, đó sẽ là khoảng 400 tập tin. Nếu tập tin 401st được bắt đầu, đối với mỗi dòng được viết ở đó, bạn có thể sử dụng điểm đánh dấu DELETE
trên các dòng liên tiếp trong tệp đầu tiên. Khi tất cả các dòng đã được đánh dấu để xóa, bản thân tệp có thể bị xóa, để lại cho bạn khoảng 400 tệp một lần nữa. Không có hành vi O (n) bị ẩn, miễn là tệp đầu tiên không bị đóng trong khi các dòng đang bị xóa.
Nhưng vẫn dễ dàng hơn cho phép hệ thống ghi nhật ký giữ nguyên tệp 1 và 401st và xóa tệp thứ nhất khi di chuyển đến tệp 402.
Khi thay đổi dòng đầu tiên, bạn sẽ _have_ để ghi lại các nội dung còn lại. Cân nhắc phân loại tệp ngược lại ... – Oded
Bạn nên gắn thẻ câu hỏi của mình với HĐH và FS đang được đề cập - có thể IS kết hợp hệ thống tệp/os có khả năng CHỈNH SỬA tệp trên đĩa. –
Không có thủ thuật đặc biệt nào. NTFS không hoạt động như thế. – OmnipotentEntity