最終更新 2003 10/22
サンプルのダウンロード → API_GetFileTime.lzh(40k)
サンプルソースコード
GetFileTime 関数
FileTimeToLocalFileTime 関数
FileTimeToSystemTime 関数
対応しているバージョン
95, 98, Me, NT3.1以降, CE1.0以降, 2000, XP
使用するヘッダとライブラリ
winbase.h
kernel32.lib
|
ファイルの最後にアクセスした日付や、最後に更新した日付などのことを
タイムスタンプといいます。
このタイムスタンプを取得するには GetFileTime() 関数を使います。
引数にはファイルハンドルが必要なので、あらかじめ CreateFile() 関数を
使ってファイルハンドルを取得しておきます。
タイムスタンプは FILETIME 構造体のポインタを指定して取得します。
GetFileTime() 関数の2番目の引数に指定すると、ファイルを作成した日時が
取得できます。
3番目は最後にファイルにアクセスした日時で、4番目は最後にファイルを
更新した(データを変更した)日時です。
最後にファイルを更新した日時は、データの内容が変更されていなくても
ファイルのオープン・クローズをするだけで日時が変わります。
2〜4番目の値は取得する必要がないときは NULL を指定します。
例えば、ファイルの最終更新日だけを取得したい場合は次のようにします。
FILETIME update_time;
GetFileTime( hfile, NULL, NULL, &update_time );
FILETIME 構造体に格納されている値は64ビットの値で、さらにグリニッジ
時計台(たしかイギリスにある時計台)の時刻で設定されているため
そのまま使おうとしてもわけがわかりません。
これを分かりやすい値に変換するには、まず最初にグリニッジ標準時刻を
自分のパソコンで設定している時刻(ローカルタイム)に変換します。
自分のパソコンの時刻が日本のタイムゾーンに設定されていれば日本の時間に
変換されます。
FILETIME local_time;
FileTimeToLocalFileTime( &update_time, &local_time );
ローカルタイムを取得したら、今度はそれをシステムタイムに変換します。
SYSTEMTIME sys_time;
FileTimeToSystemTime( &local_time, &sys_time );
変換したシステムタイムは SYSTEMTIME 構造体に格納されます。
SYSTEMTIME 構造体には次のメンバ変数があります。
wYear 西暦 例)2003
wMonth 月(1〜12)
wDayOfWeek 曜日( 日曜日=0、月曜日=1、土曜日=6 )
wDay 日(1〜31)
wHour 時間(24時間制の時間です)
wMinute 分(0〜59)
wSecond 秒(0〜59)
wMilliseconds ミリ秒(0〜999)
このメンバ変数の値を使うと楽です。
//こんなふうにして使うと
printf( "%d %d/%d %d:%d", sys_time.wYear, sys_time.wMonth,
sys_time.wDay, sys_time.wHour, sys_time.wMinute );
//こんなふうに表示されます
2003 10/22 19:14
|