Получить большой размер файла в C

Прежде чем кто-то пожалуется на "дубликат", я проверил SO довольно тщательно, но, похоже, чистого ответа пока нет, хотя вопрос выглядит довольно просто.

Я ищу переносимый код на Си, который способен выдать размер файла, даже если этот файл больше 4GB.

Обычный метод (fseek, ftell) работает нормально, пока файл остается < 2GB. Он довольно хорошо поддерживается везде, поэтому я пытаюсь найти что-то эквивалентное.

К сожалению, обновленные методы (fseeko, ftello) поддерживаются не всеми компиляторами. Например, MinGW пропускает их (и, очевидно, MSVC). Более того, некоторые комментарии заставляют меня думать, что новый возвращаемый тип (off_t) не обязательно поддерживает размер > 2GB, он может зависеть от некоторых внешних параметров, что необходимо проверить.

Однозначные методы (fseeko64, ftello64) не поддерживаются MSVC. MS предоставляет их эквиваленты, _fseeki64 & _ftelli64. Это уже плохо, но становится еще хуже: некоторые конфигурации Linux, похоже, плохо поддерживают эти функции во время выполнения. Например, мой Debian Squeeze на PowerPC, использующий GCC 4.4, выдаст метод "filesize", использующий fseeko64, который всегда возвращает 0 (в то время как в Ubuntu64 он работает нормально). MinGW, похоже, отвечает каким-то случайным мусором при размере более 2 ГБ.

Ну, я немного не в курсе, что касается переносимости. И если мне нужно сделать кучу #if #else, то почему бы не обратиться сразу к специфическим методам ОС и компиляторов, таким как GetFileSize() для MSVC, например.

9
задан Prof. Falken supports Monica 26 July 2012 в 00:14
поделиться