函数参考


_Date_Time_SetFileTime

设置文件创建,访问,修改日期与时间

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

参数

$hFile 文件句柄,使用 _WinAPI_CreateFile 函数的返回值,
并具有 FILE_WRITE_ATTRIBUTES 访问权.
$pCreateTime $tagFILETIME 结构指针, 它包含创建文件的新日期和时间.
如果应用程序不需要此信息, 设置此参数为 0.
$pLastAccess $tagFILETIME 结构指针, 它包含文件的新的最后访问日期和时间,
包括文件上次写入,读取,或运行(可执行文件)
如果应用程序不需要此信息, 设置此参数为 0.
为了保持文件的现有上次访问时间,调用 SetFileTime 参数,
并设置为 -1 之前关闭文件句柄.
$pLastWrite $tagFILETIME 结构指针, 包含文件的最后写入日期和时间.
如果应用程序不需要此信息, 设置此参数为 0.

返回值

成功: 返回 True
失败: 返回 False

注意/说明

 不是所有文件系统可以记录创建和访问时间.
 并非所有文件系统以同样的方式记录文件时间信息.
 例如 FAT 文件系统, 创建时间有 10 毫秒延迟, 修改时间有 2秒 延迟 , 访问时间有 1 天延迟(真实的访问日期)
 因此, 本函数返回的文件时间信息可能会与 SetFileTime 函数的设置不相同
 NTFS 文件系统更新文件最近访问时间, 最多时会延迟一小时.

相关

_Date_Time_GetFileTime, $tagFILETIME

示例/演示


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

Global $iMemo

_Main()

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

    ; 创建 GUI
    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)
    Local $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

; 写入一行到 memo 控件
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite