2010-04-17 37 views
5

Tôi có một dịch vụ chạy mọi lúc và cũng giữ một tập tin nhật ký. Về cơ bản, nó thêm các dòng mới vào tệp nhật ký cứ sau vài giây. Tôi viết một tập tin nhỏ mà đọc những dòng này và sau đó phân tích chúng thành các hành động khác nhau. Câu hỏi tôi có là làm thế nào tôi có thể xóa các dòng mà tôi đã phân tích cú pháp từ tệp nhật ký mà không làm gián đoạn việc ghi tệp nhật ký của dịch vụ?C Xóa dòng đầu tiên khỏi tập tin văn bản mà không cần viết lại tập tin

Thông thường khi tôi cần xóa một dòng trong một tệp thì tôi mở tệp gốc và một tệp tạm thời và sau đó tôi chỉ ghi tất cả các dòng vào tệp tạm thời ngoại trừ bản gốc mà tôi muốn xóa. Rõ ràng phương pháp này sẽ không từ đây.

Vậy tôi làm cách nào để xóa chúng?

+0

Ngắt của http://stackoverflow.com/questions/1151713/delete-a-line-from-a-file-in-c-language trong số những người khác –

Trả lời

0

Tôi không chắc chắn, nhưng tôi đang suy nghĩ theo cách này: Dòng mới là một char, vì vậy bạn phải xóa ký tự cho dòng đó + Dòng mới char Bằng cách này, "di chuyển" tất cả ký tự trở lại (để ghi đè lên dòng cũ), giống như sao chép từng ký tự ở một vị trí khác và xóa chúng khỏi vị trí cũ của chúng

Vì vậy không, tôi không nghĩ bạn có thể xóa một dòng, bạn nên viết lại tất cả tệp.

5

Trong hầu hết các hệ thống tệp thường được sử dụng, bạn không thể xóa một dòng từ đầu tệp mà không cần ghi lại toàn bộ tệp. Tôi muốn đề nghị thay vì một tập tin lớn, sử dụng rất nhiều tập tin nhỏ và xoay chúng ví dụ một lần mỗi ngày. Các tệp cũ sẽ bị xóa khi bạn không còn cần chúng nữa.

2

Không thể thực hiện, thật không may, không cần viết lại tệp, tại chỗ hoặc dưới dạng tệp riêng biệt.

Một điều bạn có thể muốn xem xét là duy trì con trỏ trong tệp khác, chỉ định vị trí của dòng chưa được xử lý đầu tiên.

Sau đó, quá trình của bạn chỉ cần mở tệp và tìm kiếm vị trí đó, xử lý một số dòng, sau đó cập nhật con trỏ.

Bạn vẫn sẽ cần phải cuộn qua các tệp tại một số điểm vì sợ rằng chúng tiếp tục phát triển mãi mãi.

0

Bạn không thể, đó không phải là cách tệp hoạt động.

Có vẻ như bạn cần một số loại dịch vụ tin nhắn đăng nhập/thư viện mà chương trình của bạn có thể kết nối đến để đăng bài viết, mà sau đó có thể ẩn các chi tiết cơ bản của việc mở tập tin/đóng cửa, vv

0

Nếu mỗi log dòng có một số nhận dạng duy nhất (hoặc thậm chí chỉ là số dòng), bạn có thể chỉ lưu trữ trong phân tích cú pháp của bạn để nhận dạng phân tích cú pháp cho đến khi bạn nhận được phân tích cú pháp. Bằng cách đó bạn không phải thay đổi bất cứ điều gì trong tệp nhật ký.

Nếu tệp nhật ký sau đó bắt đầu trở nên quá lớn, bạn có thể chuyển sang tệp mới mỗi ngày (ví dụ).

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