Win32API ファイルタイムを設定する SetFileTime

ファイルタイムを設定するには、SetFileTime関数を用いる。

  • SetFileTimeのプロトタイプ

BOOL SetFileTime(
  HANDLE hFile,                     // ファイルのハンドル
  CONST FILETIME *lpCreationTime,   // 作成日時
  CONST FILETIME *lpLastAccessTime, // 最終アクセス日時
  CONST FILETIME *lpLastWriteTime   // 最終更新日時
);



  • lpCreationTime, lpLastAccessTime, lpLastWriteTime は、設定する必要がなければ NULL を指定すればよい。


  • 使用例

#include <windows.h>

int main()
{
	HANDLE hFile;
	
	FILETIME creationTime, lastAccessTime, lastWriteTime;
	SYSTEMTIME localTime;
	
	//ファイルタイムを変更するためには、GENERIC_WRITE が必要
	hFile = CreateFile("test.txt", 
				GENERIC_READ|GENERIC_WRITE,
				0, 
				NULL, 
				OPEN_EXISTING, 
				FILE_ATTRIBUTE_NORMAL, 
				NULL);
	
	if (hFile == INVALID_HANDLE_VALUE) {
		return 1;
	}


	///////////////////////////////////////////////////
	//ファイルタイムを現在のローカルタイムに変更する
	GetLocalTime(&localTime);

	SystemTimeToFileTime(&localTime, &creationTime);
	SystemTimeToFileTime(&localTime, &lastAccessTime);
	SystemTimeToFileTime(&localTime, &lastWriteTime);

	if (!SetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) {
		return 1;
	}


	///////////////////////////////////////////////////
	//ファイルタイムが変更されているか確かめる
	memset(&creationTime, 0, sizeof(creationTime));
	memset(&lastAccessTime, 0, sizeof(lastAccessTime));
	memset(&lastWriteTime, 0, sizeof(lastWriteTime));

	if (!GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime)) {
		return 1;
	}


	SYSTEMTIME st;

	FileTimeToSystemTime(&creationTime, &st);
	printf("CreationTime: %04d/%02d/%02d %02d:%02d:%02d\n",
		st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

	FileTimeToSystemTime(&lastAccessTime, &st);
	printf("LastAccessTime: %04d/%02d/%02d %02d:%02d:%02d\n",
		st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

	FileTimeToSystemTime(&lastWriteTime, &st);
	printf("LastWriteTime: %04d/%02d/%02d %02d:%02d:%02d\n",
		st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

	CloseHandle(hFile);
	
	return 0;
}



参考
http://msdn.microsoft.com/ja-jp/library/cc429940.aspx