ファイルのタイムスタンプを調べる

最終更新 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

| home |