GetFileSizeEx()関数でもファイルサイズは取得できますが、ファイルハンドルが必要な為、一旦ファイルをオープンする必要があります。 そこで、GetFileAttributesEx()関数を使って、ファイルハンドルを使わずにファイルサイズを取得します。 ファイルをオープンしなくても取得できるので手軽に取得できます。ファイルサイズの他にも、以下の情報が取得できます。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <windows.h> /* ファイルハンドル無しでファイルサイズを取得する */ int _tmain ( int argc , _TCHAR* argv[] ) { // 標準出力にユニコード出力する setlocale( LC_ALL, "Japanese" ); /* ファイルの情報を取得する */ { WIN32_FILE_ATTRIBUTE_DATA tFileInfo; /* ファイルハンドル無しでファイルサイズを取得する */ if ( 0 != ::GetFileAttributesEx( L"test.png", GetFileExInfoStandard, &tFileInfo ) ) { wprintf( L"dwFileAttributes = 0x%08x¥n" L"ftCreationTime = 0x%016llx¥n" L"ftLastAccessTime = 0x%016llx¥n" L"ftLastWriteTime = 0x%016llx¥n" L"nFileSizeLow = 0x%08x¥n" L"nFileSizeHigh = 0x%08x¥n" , tFileInfo.dwFileAttributes // ファイル属性 , *( (LONGLONG*)&tFileInfo.ftCreationTime ) // ファイル作成日時(FILETIME) , *( (LONGLONG*)&tFileInfo.ftLastAccessTime ) // ファイル最終アクセス日時(FILETIME) , *( (LONGLONG*)&tFileInfo.ftLastWriteTime ) // ファイル更新日時(FILETIME) , tFileInfo.nFileSizeLow // ★ファイルサイズ(下位) , tFileInfo.nFileSizeHigh // ★ファイルサイズ(上位) ); } } // 正常終了 return( 0 ); }
dwFileAttributes = 0x00000020
ftCreationTime = 0x01d21258dd6295c2
ftLastAccessTime = 0x01d21258dd6295c2
ftLastWriteTime = 0x01d20b2e8b44e367
nFileSizeLow = 0x00011451
nFileSizeHigh = 0x00000000