Trước khi mọi người phàn nàn về "trùng lặp", tôi đã kiểm tra SO khá kỹ lưỡng, nhưng dường như không có câu trả lời rõ ràng nào, mặc dù câu hỏi có vẻ khá đơn giản.Nhận kích thước tệp lớn trong C
Tôi đang tìm mã số di động C mã, có thể cung cấp kích thước tệp, ngay cả khi tệp lớn hơn 4GB.
Phương pháp thông thường (fseek, ftell) hoạt động tốt, miễn là tệp vẫn giữ nguyên là < 2GB. Nó được hỗ trợ khá tốt ở khắp mọi nơi, vì vậy tôi đang cố gắng tìm một thứ tương đương.
Thật không may, các phương thức được cập nhật (fseeko, ftello) không được tất cả các trình biên dịch hỗ trợ. Ví dụ, MinGW bỏ lỡ nó (và rõ ràng là MSVC). Hơn nữa, một số ý kiến làm cho tôi tin rằng kiểu trả về mới (off_t) không nhất thiết phải hỗ trợ kích thước> 2GB, nó có thể phụ thuộc vào một số tham số bên ngoài, để được kiểm tra.
Các phương pháp rõ ràng (fseeko64, ftello64) không được MSVC hỗ trợ. MS cung cấp tương đương, _fseeki64 & _ftelli64. Điều này đã xấu, nhưng nó trở nên tồi tệ hơn: một số cấu hình Linux dường như hỗ trợ các chức năng này trong thời gian chạy. Ví dụ, Debian Squeeze của tôi trên PowerPC, sử dụng GCC 4.4, sẽ tạo ra một phương thức "filesize" bằng cách sử dụng fseeko64 luôn trả về 0 (trong khi nó hoạt động tốt cho Ubuntu64). MinGW dường như trả lời một số rác ngẫu nhiên trên 2GB.
Vâng, tôi hơi thất vọng về khả năng di động. Và nếu tôi cần thực hiện một loạt #if #else, thì tại sao không đi thẳng đến hệ điều hành của phương thức & trình biên dịch cụ thể ở vị trí đầu tiên, chẳng hạn như GetFileSize() cho MSVC chẳng hạn.
Vâng, định nghĩa của bạn về "di động" là gì? Có nhiều hệ thống thậm chí không thể mở tệp. Thậm chí nhiều hơn, không thể mở các tệp có dung lượng trên 4 GB. –