C++でファイルサイズ取得

C++でファイルサイズを取得する

// for win32api
#include <Windows.h>

// for ifstream
#include <fstream>

// for stat
#include <sys/types.h>
#include <sys/stat.h>

int main(int argc, char* argv[])
{
    const char* filepath = "C:\\Windows\\Media\\Windows Shutdown.wav";

    // for win32api
    HANDLE hFile = CreateFile(filepath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    DWORD size1 = GetFileSize(hFile, NULL);
    CloseHandle(hFile);
    printf("GetFileSize :%ld\n", size1);

    // for ifstream
    std::ifstream ifs(filepath, std::ios::binary);
    ifs.seekg(0, std::ios::end);
    auto eofpos = ifs.tellg();
    ifs.clear();
    ifs.seekg(0, std::ios::beg);
    auto begpos = ifs.tellg();
    auto size2 = eofpos - begpos;
    printf("ifstream :%ld\n", size2);
    ifs.close();

    // for stat
    struct _stat buf;
    int result = _stat(filepath, &buf);
    if (result == 0)
    {
        printf("stat :%ld\n", buf.st_size);
    }

    return 0;
}

結果
GetFileSize :169444
ifstream :169444
stat :169444