Function Reference

_Date_Time_SetFileTime

ファイルの作成、アクセス、変更日時を設定します。

#Include <Date.au3>
_Date_Time_SetFileTime($hFile, $pCreateTime, $pLastAccess, $pLastWrite)

 

パラメータ

$hFile ファイルのハンドル。
ファイルハンドルはCreateFile関数を使ってGENERIC_READアクセス権限で作成されたものでなければなりません。
$pCreateTime 新しいファイル作成日時を格納した$tagFILETIME構造体へのポインタ。
アプリケーションでこの情報を設定する必要がない場合は0です。
$pLastAccess 新しいファイル最終アクセス日時を格納した$tagFILETIME構造体へのポインタ。
最終アクセス時刻とはファイルが最後に書き込み、読み込み、(実行可能ファイルの場合)実行された時刻です。
アプリケーションでこの情報を設定する必要がない場合は0です。
既存の最終アクセス時刻をファイルのアクセス後にも保持したい場合は、
ファイルハンドルを閉じる前にこのパラメータを-1に設定してSetFileTimeを呼んでください。
$pLastWrite 新しいファイル最終書き込み日時を格納した$tagFILETIME構造体へのポインタ。
アプリケーションでこの情報を設定する必要がない場合は0です。

 

返し値

成功: True
失敗: False

 

注意

全てのファイルシステムが作成時刻と最終アクセス時刻を記録するわけではありませんし、 記録していたとしても全てのファイルシステムが同じ形式でそれらを記録しているわけではありません。
例えばFATでは作成時刻は10ミリ秒の分解能、書き込み時刻は2秒の分解能、 アクセス時刻は1日の分解能(実際はアクセス日時)を持ちます。 従ってGetFileTime関数はSetFileTime関数を使用して設定したファイル時刻情報と異なる時刻情報を返すことがあります。 NTFSでは最終アクセス後のファイル最終アクセス時刻更新が最大で1時間遅れることがあります。

 

関連

_Date_Time_GetFileTime, $tagFILETIME

 


#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <Date.au3>
#include <WindowsConstants.au3>

Global $iMemo

_Main()

Func _Main()
    Local $hGUI, $hFile, $tFile, $aTime

    ; GUIを作成
    $hGUI = GUICreate("Time", 400, 300)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

    ; テストファイル作成しファイル時刻を設定
    $hFile = _WinAPI_CreateFile(@ScriptDir & "\Test.xyz", 1)
    if $hFile = 0 then _WinAPI_ShowError("Unable to create file")
    $tFile = _Date_Time_EncodeFileTime(@MON, @MDAY, @YEAR, @HOUR, @MIN, @SEC)
    $pFile = DllStructGetPtr($tFile)
    _Date_Time_SetFileTime($hFile, $pFile, $pFile, $pFile)
    _WinAPI_CloseHandle($hFile)

    ; ファイル時刻読み込み
    $hFile = _WinAPI_CreateFile(@ScriptDir & "\Test.xyz", 2)
    if $hFile = 0 then _WinAPI_ShowError("Unable to open file")
    $aTime = _Date_Time_GetFileTime($hFile)
    _WinAPI_CloseHandle($hFile)

    MemoWrite("Created ..: " & _Date_Time_FileTimeToStr($aTime[0]))
    MemoWrite("Accessed .: " & _Date_Time_FileTimeToStr($aTime[1]))
    MemoWrite("Modified .: " & _Date_Time_FileTimeToStr($aTime[2]))

    ; ユーザーが終了するまでループ
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
   
    FileDelete(@ScriptDir & "\Test.xyz")

EndFunc   ;==>_Main

; メモコントロールに1行書き込む
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite