Как правильно определять размер файла в C?

Рейтинг: 0Ответов: 3Опубликовано: 24.02.2011

Я уже знаю, что пара fseek/ftell

fseek(pointer, 0L, SEEK_END);
size = ftell(pointer);

скажет размер файла. Но мне странно, что для того, чтобы определить размер файла, нужно двигать указатель. Есть ли более "правильный" метод?

Ответы

▲ 2

Можно юзать API. Если под Windows, то есть функция GetFileSize.

▲ 2

Операционная система может предоставлять возможность узнать размер файла. Однако, такой код будет непереносим. К тому же, передвижение указателя - самый надёжный способ. По крайней мере, для файлов меньше 4G. Для бОльших файлов надо использовать другие функции и определить кое какие макросы (на вскидку не помню.. что-то вроде FILE_OFFSET_64).

Я с вами согласен, что открывать файл и двигать указатель только для того, чтобы узнать его размер - это полный дурдом. Но, к сожалению, другого переносимого способа нет.

▲ 2

В Unix-like системах - через семейство системных вызовов stat, заполняющих struct stat. Там одно из полей (st_size) - размер файла. Кроме того, предоставляется куча другой информации о файле.