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