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

ナビゲーションに移動 検索に移動
354行目: 354行目:
== タイムスタンプの取得 / 設定 ==
== タイムスタンプの取得 / 設定 ==
==== タイムスタンプの取得 ====
==== タイムスタンプの取得 ====
この関数群は、ディレクトリも同様に操作できる。<br>
この関数群は、ディレクトリも同様にタイムスタンプを取得できる。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  // タイムスタンプの取得
  // タイムスタンプの取得
377行目: 377行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
FILETIME構造体およびSYSTEMTIME構造体を、以下に示す。<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, &lt1);        // 作成日時
SystemTimeToFileTime(&st2, &lt2);        // 最終アクセス日時
SystemTimeToFileTime(&st3, &lt3);        // 最終更新日時
// ローカル時刻からファイル時刻に変換
LocalFileTimeToFileTime(&lt1, &ft1);      // 作成日時
LocalFileTimeToFileTime(&lt2, &ft2);      // 最終アクセス日時
LocalFileTimeToFileTime(&lt3, &ft3);      // 最終更新日時
// ファイル日時の設定
SetFileTime(hFile, &ft1, &ft2, &ft3);
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>

案内メニュー