ファイルのタイムスタンプを設定 <TOP>
ファイルのタイムスタンプを設定します。
CreateFile ファイルなどの作成やオープンや切り捨てを行う
CloseHandle オープンされているオブジェクトハンドルをクローズ
GetSystemTime システムの現在の日付と時刻を取得
SystemTimeToFileTime システム時間をファイル時間に変換
SetFileTime ファイルの作成日時などを設定
ファイルオープンダイアログでファイルを選択、「日時設定」で作成日時を現在時間に書き換えています。
結果をプロパティで確認しています。SysTimeは世界標準時なので日本時間に変換(+9時間)しています。
Ret = Api_SystemTimeToFileTime(SysTime, CreateTime) 作成日時
Ret = Api_SystemTimeToFileTime(SysTime, AccsessTime) アクセス日時
Ret = Api_SystemTimeToFileTime(SysTime, WriteTime) 更新日時
'================================================================ '= ファイルのタイムスタンプを設定
'= (SetFileTime.bas) '================================================================ #include "Windows.bi" Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type #define INVALID_HANDLE_VALUE (-1) ' ファイルハンドルの値が無効であることを示す定数の宣言 #define GENERIC_WRITE &H40000000 ' オブジェクトへのアクセスの種類を指定する定数の宣言 #define OPEN_EXISTING 3 ' ファイルへの動作を指定する定数の宣言 ' ファイルなどの作成やオープンや切り捨てを行う関数の宣言 Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lFileName$, ByVal dDesiredAccess&, ByVal dShareMode&, lSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dCreationDisposition&, ByVal dFlagsAndAttributes&, ByVal hTemplateFile&) ' オープンされているオブジェクトハンドルをクローズ Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&) ' 日付と時刻を定義する構造体 Type SYSTEMTIME wYear As Integer wMonth As Integer wDayOfWeek As Integer wDay As Integer wHour As Integer wMinute As Integer wSecond As Integer wMilliseconds As Integer End Type ' システムの現在の日付と時刻を取得する関数の宣言 Declare Sub Api_GetSystemTime Lib "kernel32" Alias "GetSystemTime" (lpSystemTime As SYSTEMTIME) ' ファイル時間を定義する構造体 Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type ' システム時間をファイル時間に変換する関数の宣言 Declare Function Api_SystemTimeToFileTime& Lib "kernel32" Alias "SystemTimeToFileTime" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) ' ファイルの作成日時などを設定する関数の宣言 Declare Function Api_SetFileTime& Lib "kernel32" Alias "SetFileTime" (ByVal hFile&, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) Var Shared Edit1 As Object Var Shared Text3 As Object Edit1.Attach GetDLgItem("Edit1") : Edit1.SetFontSize 14 Text3.Attach GetDLgItem("Text3") : Text3.SetFontSize 14 Var Shared FileName As String '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() FileName = WinOpenDlg("ファイルのオープン", "*.*", "全てのファイル(*.*)", 0) If FileName <> Chr$(&H1B) Then Edit1.SetWindowText FileName End If End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var FileHandle As Long Var SecAttr As SECURITY_ATTRIBUTES Var SysTime As SYSTEMTIME Var LocalTime As SYSTEMTIME Var CreateTime As FILETIME Var AccessTime As FILETIME Var WriteTime As FILETIME Var ymd As String Var hms As String Var Ret As Long 'セキュリティ構造体を初期化 SecAttr.nLength = Len(SecAttr) 'ファイルをオープン FileHandle = Api_CreateFile(FileName, GENERIC_WRITE, 0, SecAttr, OPEN_EXISTING, 0, 0) 'ファイルハンドルの値が有効であるときは If FileHandle <> INVALID_HANDLE_VALUE Then 'システムの日時を取得 Api_GetSystemTime SysTime 'ローカルの日時を表示 ymd = Trim$(Str$(SysTime.wYear)) & "/" & Right$(Str$(100 + SysTime.wMonth), 2) & "/" & Right$(Str$(100 + SysTime.wDay), 2) 'SysTime(GMT)を日本時間(JMT:Hour)に変換 If SysTime.wHour < 16 Then Hour = SysTime.wHour + 9 Else Hour = SysTime.wHour - 15 hms = Right$(Str$(100 + Hour), 2) & ":" & Right$(Str$(100 + SysTime.wMinute), 2) & ":" & Right$(Str$(100 + SysTime.wSecond), 2) Text3.SetWindowText ymd & " " & hms 'システム時間をファイル時間に変換 ↓CreateTime:作成日時/AccsessTime:アクセス日時/WriteTime:更新日時 Ret = Api_SystemTimeToFileTime(SysTime, CreateTime) 'ファイルの作成日時を設定 Ret = Api_SetFileTime(FileHandle, CreateTime, AccessTime, WriteTime) 'ファイルをクローズ Ret = Api_CloseHandle(FileHandle) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End