Tôi cần truy cập tệp lớn hơn 2gb bằng C. Trong một lần chạy chương trình, số byte sẽ được đọc từ tệp và vị trí của vị trí tiếp theo được lưu. Trong lần chạy tiếp theo của chương trình, vị trí tệp được đọc và một số byte được đọc bắt đầu từ vị trí đó. Các biến chứng là đôi khi tập tin có thể được 'nén' bằng cách sao chép nó vào một tệp mới, ít hơn bất kỳ byte nào đã được đọc (tôi nghĩ rằng sao chép là cách duy nhất để thực hiện điều đó). Số byte bị loại bỏ theo cách này cũng sẽ được lưu lại.Truy cập các tệp lớn trong C
Tôi cần biết vị trí hiện tại của tệp từ khởi đầu ban đầu để đồng bộ hóa với một tệp khác. Điều này sẽ dễ dàng bởi vì nó chỉ là (current_offset + deleted_bytes).
Lý do không đơn giản là fseek chỉ sử dụng chỉ mục dài int giới hạn tệp thành 2gb và fsetpos sử dụng cấu trúc fpos_t cho chỉ mục vị trí, không phải là số và không thể chuyển đổi qua lại đến một. Tôi không biết bất kỳ cách nào để sử dụng một chỉ mục dài dài int cho định vị tập tin, đó sẽ là giải pháp lý tưởng.
Tôi phải làm gì?
Nền tảng nào? 'ftello()' và 'fseeko()' có thể là một tùy chọn. –
ftello và fseeko sẽ tuân thủ POSIX.1, nhưng> 2GB cũng là vấn đề phụ thuộc vào hệ thống tập tin. –