В соответствии с файлом unix man ftell
либо возвращает -1, чтобы указать на ошибку.Ошибки ftell на действительно больших файлах
Определение функции является:
long int ftell (FILE * stream);
Где long int
это 32-битное целое (вам нужно long long
64 бит)
однако (-1L) == 0x00000000FFFFFFFF LL
, который должен быть допустимым значением для очень больших файлов (окружали 4 ГБ), в этом случае, как мы узнаем, произошла ли ошибка или у нас просто большой файл?
Вы можете проверить 'errno' или переключиться на' off64_t ftello64 (FILE * stream) '. Столкновение файла с размером> 2^63 в байтах по крайней мере менее возможно, чем у одного, имеющего> 2^31 байта. – Neet
@Neet оставьте свой комментарий как ответ. – doron
«Где длинное int - 32-битное целое» - я думаю ** нет. ** Ничто не гарантирует/не требует этого. На любой разумной 64-битной реализации это на самом деле 64 бита. (Вы читаете это правильно - Windows не считается «разумной реализацией».) –