How to get filesize using stat() in C/C++

Problem:

You want to use stat() from sys/stat.h POSIX header in order to get the size of a file.

Solution

Use this function:

#include <sys/stat.h>

/**
 * Get the size of a file.
 * @return The filesize, or 0 if the file does not exist.
 */
size_t getFilesize(const char* filename) {
    struct stat st;
    if(stat(filename, &st) != 0) {
        return 0;
    }
    return st.st_size;   
}

If you want to use C++ std::string for the filename instead of char*, you can use this equivalent instead:

#include <sys/stat.h>

/**
 * Get the size of a file.
 * @param filename The name of the file to check size for
 * @return The filesize, or 0 if the file does not exist.
 */
size_t getFilesize(const std::string& filename) {
    struct stat st;
    if(stat(filename.c_str(), &st) != 0) {
        return 0;
    }
    return st.st_size;   
}

These functions return exactly the same number as if du -sb would be executed on the same file.

For a detailed stat() reference, see the Opengroup page on mkdir