четверг, 30 июня 2011 г.

Как узнать размер файла в C/C++ ?


Существует куча способов узнать размер файла при помощи С/С++. Есть способы, которые зависят от операционной системы, есть те, которые зависят от файловой системы.



Например, этот вариант отлично работает в unix-like системах
// return file size in bytes
int getFileSize(FILE *input)
{
    int fileSizeBytes;
    // set file pointer to end of file
    fseek(input, 0, SEEK_END);
    // get current pointer position in bytes (== file size in bytes)
    fileSizeBytes = ftell(input);
    // return pointer to begin of file (it's very IMPORTANT)
    fseek(input, 0, SEEK_SET);
    return fileSizeBytes;
}
Но то, что прекрасно работает на unix-like системах, никогда не всегда работает в windows. Поэтому предлагаю posix вариант данной функции, который хорошо работает как в windows так и в linux:
#include <sys/stat.h>
...
int getFileSize(const char * fileName)
{
    struct stat file_stat;
    stat(fileName, &file_stat);
    return file_stat.st_size;
}

8 комментариев:

  1. Здравствуйте!
    Воспользовался вторым методом по определению размера файла.
    Но метод возвращает отрицательное значение. Файл большой, где то порядка гигабайта. Как тогда быть?

    ОтветитьУдалить
  2. Та же проблема.....

    ОтветитьУдалить
  3. Возвращать double вместо int?

    ОтветитьУдалить
  4. Вам будет возвращаться int, а значит на 32-х битных ОСях в инт столько не влезит (4 байта)

    ОтветитьУдалить
  5. Сразу видно, что автор быдлокодер. Нихуя не умеет объяснять.

    ОтветитьУдалить