「MFCの基礎 - ファイル」の版間の差分

ナビゲーションに移動 検索に移動
349行目: 349行目:
       break;
       break;
  }
  }
</syntaxhighlight>
<br><br>
== タイムスタンプの取得 / 設定 ==
==== タイムスタンプの取得 ====
この関数群は、ディレクトリも同様に操作できる。<br>
<syntaxhighlight lang="c++">
// タイムスタンプの取得
BOOL GetFileTime(
                    HANDLE      hFile,            // ファイルのハンドル
                    LPFILETIME  lpCreationTime,    // 作成日時
                    LPFILETIME  lpLastAccessTime,  // 最終アクセス日時
                    LPFILETIME  lpLastWriteTime    // 最終更新日時
);
// タイムスタンプからローカル時間に変換
BOOL FileTimeToLocalFileTime(
                                CONST FILETIME*  lpFileTime,      // 世界標準時間のファイル時刻
                                LPFILETIME        lpLocalFileTime  // ローカル時間のファイル時刻
);
// タイムスタンプからシステム時間に変換
BOOL FileTimeToSystemTime(
                            CONST FILETIME*  lpFileTime,  // 変換前のファイル時刻
                            LPSYSTEMTIME      lpSystemTime  // 変換後のシステム日時
);
</syntaxhighlight>
<br>
FILETIME構造体およびSYSTEMTIME構造体を、以下に示す。<br>
<syntaxhighlight lang="c++">
typedef struct _FILETIME {
    DWORD  dwLowDateTime;      // 下位32ビット
    DWORD  dwHighDateTime;    // 上位32ビット
} FILETIME, *PFILETIME;
typedef struct _SYSTEMTIME {
    WORD    wYear;              // 年(1901~)
    WORD    wMonth;            // 月(1-12)
    WORD    wDayOfWeek;        // 曜日(0-6)
    WORD    wDay;              // 日(1-31)
    WORD    wHour;              // 時(0-23)
    WORD    wMinute;            // 分(0-59)
    WORD    wSecond;            // 秒(0-59)
    WORD    wMilliseconds;      // ミリ秒(0-999)
} SYSTEMTIME, *PSYSTEMTIME;
</syntaxhighlight>
<br>
以下の例では、変数hFileにファイルのハンドルを指定して、タイムスタンプを取得している。<br>
ディレクトリの場合は、<code>FILE_FLAG_BACKUP_SEMANTICS</code>フラグを指定する。<br>
<syntaxhighlight lang="c++">
FILETIME    ft1, ft2, ft3;      // ファイル時刻
FILETIME    lt1, lt2, lt3;      // ローカル時刻
SYSTEMTIME  st1, st2, st3;      // システム日時
// ファイル日時の取得
GetFileTime( hFile, &ft1, &ft2, &ft3 );
// ファイル時刻からローカル時刻に変換
FileTimeToLocalFileTime( &ft1, &lt1 );      // 作成日時
FileTimeToLocalFileTime( &ft2, &lt2 );      // 最終アクセス日時
FileTimeToLocalFileTime( &ft3, &lt3 );      // 最終更新日時
// ローカル時刻からシステム日時に変換
FileTimeToSystemTime( &lt1, &st1 );        // 作成日時
FileTimeToSystemTime( &lt2, &st2 );        // 最終アクセス日時
FileTimeToSystemTime( &lt3, &st3 );        // 最終更新日時
// 作成日時をprintf()で表示
printf(TEXT("%04d/%02d/%02d (%d) %02d:%02d:%02d.%03d\n"),
        st1.wYear,              // 年(1901-)
        st1.wMonth,            // 月(1-12)
        st1.wDay,              // 日(1-31)
        st1.wDayOfWeek,        // 曜日(0-6)
        st1.wHour,              // 時(0-23)
        st1.wMinute,            // 分(0-59)
        st1.wSecond,            // 秒(0-59)
        st1.wMilliseconds      // ミリ秒(0-999)
);
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー