13,000
回編集
354行目: | 354行目: | ||
== タイムスタンプの取得 / 設定 == | == タイムスタンプの取得 / 設定 == | ||
==== タイムスタンプの取得 ==== | ==== タイムスタンプの取得 ==== | ||
この関数群は、ディレクトリも同様にタイムスタンプを取得できる。<br> | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
// タイムスタンプの取得 | // タイムスタンプの取得 | ||
377行目: | 377行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
<code>FILETIME</code>構造体および<code>SYSTEMTIME</code>構造体を、以下に示す。<br> | |||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
typedef struct _FILETIME { | typedef struct _FILETIME { | ||
427行目: | 427行目: | ||
st1.wMilliseconds // ミリ秒(0-999) | st1.wMilliseconds // ミリ秒(0-999) | ||
); | ); | ||
</syntaxhighlight> | |||
<br> | |||
==== タイムスタンプの設定 ==== | |||
この関数群は、ディレクトリも同様にタイムスタンプを設定できる。<br> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// システム時間からファイル日時に変換 | |||
BOOL SetFileTime( | |||
HANDLE hFile, // ファイルのハンドル | |||
CONST FILETIME* lpCreationTime, // 作成日時 | |||
CONST FILETIME* lpLastAccessTime, // 最終アクセス日時 | |||
CONST FILETIME* lpLastWriteTime // 最終更新日時 | |||
); | |||
// ローカル時間からファイル日時に変換 | |||
BOOL LocalFileTimeToFileTime( | |||
CONST FILETIME* lpLocalFileTime, // ローカル時間のファイル時刻 | |||
LPFILETIME lpFileTime // 世界標準時間のファイル時刻 | |||
); | |||
// ファイル日時の設定 | |||
BOOL SystemTimeToFileTime( | |||
CONST SYSTEMTIME* lpSystemTime, // 変換前のシステム日時 | |||
LPFILETIME lpFileTime // 変換後のファイル時刻 | |||
); | |||
</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> | |||
<u>このフラグを指定しない場合、正常に処理できないことに注意する。</u><br> | |||
<syntaxhighlight lang="c++"> | |||
FILETIME ft1, ft2, ft3; // ファイル時刻 | |||
FILETIME lt1, lt2, lt3; // ローカル時刻 | |||
SYSTEMTIME st1, st2, st3; // システム日時 | |||
// 現在の日時を構造体にセット | |||
GetLocalTime(&st1); | |||
GetLocalTime(&st2); | |||
GetLocalTime(&st3); | |||
// システム日時からローカル時刻に変換 | |||
SystemTimeToFileTime(&st1, <1); // 作成日時 | |||
SystemTimeToFileTime(&st2, <2); // 最終アクセス日時 | |||
SystemTimeToFileTime(&st3, <3); // 最終更新日時 | |||
// ローカル時刻からファイル時刻に変換 | |||
LocalFileTimeToFileTime(<1, &ft1); // 作成日時 | |||
LocalFileTimeToFileTime(<2, &ft2); // 最終アクセス日時 | |||
LocalFileTimeToFileTime(<3, &ft3); // 最終更新日時 | |||
// ファイル日時の設定 | |||
SetFileTime(hFile, &ft1, &ft2, &ft3); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |