Прежде чем кто-либо жаловался на "дубликат", я довольно тщательно проверял SO, но, похоже, пока нет четкого ответа, хотя вопрос выглядит довольно простым.
Я ищу переносимый код C , который может предоставить размер файла, даже если такой файл больше 4 ГБ.
Обычный метод (fseek, ftell) работает нормально, пока файл остается <2 ГБ. Это довольно хорошо поддерживается везде, поэтому я пытаюсь найти что-то эквивалентное. </p>
К сожалению, обновленные методы (fseeko, ftello) поддерживаются не всеми компиляторами. Например, MinGW пропустит это (и, очевидно, MSVC). Кроме того, некоторые комментарии заставляют меня поверить, что новый тип возвращаемого значения (off_t) не обязательно поддерживает размер> 2 ГБ, это может зависеть от некоторых внешних параметров, которые необходимо проверить.
Однозначные методы (fseeko64, ftello64) не поддерживаются MSVC. MS предоставляет их эквивалент, _fseeki64 & _ftelli64. Это уже плохо, но становится хуже: некоторые конфигурации Linux, кажется, плохо поддерживают эти функции во время выполнения. Например, мой Debian Squeeze на PowerPC, использующий GCC 4.4, создаст метод «размер файла» с использованием fseeko64, который всегда возвращает 0 (хотя он отлично работает для Ubuntu64). MinGW, кажется, отвечает на случайный мусор выше 2 ГБ.
Ну, я немного не в курсе, что касается переносимости. И если мне нужно сделать кучу #if #else, то почему бы не перейти прямо к специфике методов OS и компиляторов, например, GetFileSize () для MSVC.