12,925
回編集
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, <1 ); // 作成日時 | |||
FileTimeToLocalFileTime( &ft2, <2 ); // 最終アクセス日時 | |||
FileTimeToLocalFileTime( &ft3, <3 ); // 最終更新日時 | |||
// ローカル時刻からシステム日時に変換 | |||
FileTimeToSystemTime( <1, &st1 ); // 作成日時 | |||
FileTimeToSystemTime( <2, &st2 ); // 最終アクセス日時 | |||
FileTimeToSystemTime( <3, &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> |