EntryNavi : « ファイルを開くダイアログの使用方法 | メイン | クラシックチョコレートケーキ »

CategoryNavi : メイン -> コンピューター -> 開発 -> C/C++

ファイルのタイムスタンプを変更する

Win32 APIで、ファイルの作成日時・最終アクセス日時・最終更新日時を変更する方法です。

使用するAPI

  • GetFileTime:時間に関する情報の取得
  • FileTimeToLocalFileTime:取得した時間データ(システム時間)をローカル時間へ変換
  • FileTimeToSystemTime:取得した時間データを扱いやすい構造へ変換
  • SystemTimeToFileTime:扱いやすい構造から実際に使う構造へ変換
  • LocalFileTimeToFileTime:ローカル時間からシステム時間へ変換
  • SetFileTime:時間を設定
大雑把な役割と流れです。
FILETIME構造体で取得・設定を行いますが中身はビット列でさっぱりわかりませんので SYSTEMTIME構造体へ変換して表示に使ったり値をいじります。

例の如くサンプルです。

#include <stdio.h>
#include <windows.h>

void ShowSystemTime(SYSTEMTIME systime);

int main()
{
HANDLE file;
FILETIME file_time,local_file_time;
SYSTEMTIME system_time;

//ファイルを開く(なければ作成)
file = CreateFile(".\\sample.dat",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(file == INVALID_HANDLE_VALUE){
printf("ファイルが開けません。\n");
return 1;
}

//-- 現在の更新時間
//更新時間の取得(必要ない情報はNULLでOK)
GetFileTime(file,NULL,NULL,&file_time);
//ローカルの時間へ変換
FileTimeToLocalFileTime(&file_time,&local_file_time);//データの型は変わってない
//SYSTEMTIME構造体へ変換
FileTimeToSystemTime(&local_file_time,&system_time);//データの型の変換
//取得情報の表示
ShowSystemTime(system_time);

//-- 時刻修正
system_time.wYear--; //1年戻してみる
//FILETIME構造体へ戻す
SystemTimeToFileTime(&system_time,&local_file_time);
//ローカルからシステム時間へ変換
LocalFileTimeToFileTime(&local_file_time,&file_time);
//更新時間の更新(更新不要な情報はNULLでOK)
SetFileTime(file,NULL,NULL,&file_time);


//-- 更新内容の確認
GetFileTime(file,NULL,NULL,&file_time);
FileTimeToLocalFileTime(&file_time,&local_file_time);
FileTimeToSystemTime(&local_file_time,&system_time);
ShowSystemTime(system_time);

//ファイルを閉じる
CloseHandle(file);

return;
}

void ShowSystemTime(SYSTEMTIME systime)
{
char *week[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};

printf("%d/%d/%d(%s) %d:%d:%d'%d\n",systime.wYear
,systime.wMonth
,systime.wDay
,week[systime.wDayOfWeek]
,systime.wHour
,systime.wMinute
,systime.wSecond
,systime.wMilliseconds
);
}
GetFileTimeとSetFileTimeの第2・3・4引数でそれぞれ作成日時・最終アクセス日時・最終更新日時を 取得・更新できます。今回は、最終更新日時だけピックアップしました。

<Category : C/C++>

検索

Google

サイドフィード

track feed 理ろぐ
人気ブログランキング - 理ろぐ
Powered by
Movable Type 3.34