わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。

ファイルハンドル無しでファイルサイズを取得します。

GetFileSizeEx()関数でもファイルサイズは取得できますが、ファイルハンドルが必要な為、一旦ファイルをオープンする必要があります。 そこで、GetFileAttributesEx()関数を使って、ファイルハンドルを使わずにファイルサイズを取得します。 ファイルをオープンしなくても取得できるので手軽に取得できます。ファイルサイズの他にも、以下の情報が取得できます。

取得できる情報

  • ファイル属性
  • ファイル作成日時(FILETIME)
  • ファイル最終アクセス日時(FILETIME)
  • ファイル更新日時(FILETIME)
  • ファイルサイズ(下位)
  • ファイルサイズ(上位)
#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






わびさびサンプルソース

WindowsやHTML5などのプログラムのサンプルコードやフリーソフトを提供します。