找回密码
 加入
搜索
查看: 4371|回复: 14

[AU3基础] [已解决]如何获取文件修改时间,要毫秒级

 火.. [复制链接]
发表于 2011-10-9 22:42:52 | 显示全部楼层 |阅读模式
本帖最后由 805333 于 2011-10-12 22:12 编辑

如何获取文件修改时间,要毫秒级,FileGetTime 只能获取到秒
发表于 2011-10-9 22:58:17 | 显示全部楼层
有什么特别的用途吗?有必要取到毫秒级?
发表于 2011-10-9 23:58:06 | 显示全部楼层
au3有这个精度吗?
发表于 2011-10-10 01:16:17 | 显示全部楼层
windows的文件修改时间就没到毫秒过,如果是系统关键文件,用性能计数器可能还能取到(不太确定)
发表于 2011-10-10 02:06:28 | 显示全部楼层
楼主 毫秒级 无意义啊。。
发表于 2011-10-10 22:34:27 | 显示全部楼层
hehe,这个有点难,windows不关心毫秒的东西
发表于 2011-10-10 22:53:01 | 显示全部楼层
这个要求也太高了点吧!估计很难做到!
发表于 2011-10-10 23:45:49 | 显示全部楼层
以前曾在网上看到一段话:当AU3运用得已经非常熟练,以为是编程高手的时候,却不知道API函数TerminateProcess 是做什么用的。 现在这情况真相似啊。


Func _FileGetTime($sFilePath, $iTime = 1, $fText = 1)
        Local Const $tagFILETIME = "dword LowDateTime;dword HighDateTime"
        Local Const $tagSYSTEMTIME = "word Year;word Month;word DayofWeek;word Day;word Hour;word Minute;word Second;word Milliseconds"

        Local $hFile = DllCall("Kernel32.dll", "handle", "CreateFileW", "wstr", $sFilePath, "dword", 0x80000000, "dword", 3, "dword", 0, "dword", 3, "dword", 0, "handle", 0)
        $hFile = $hFile[0]

        If ($hFile < 1) Then Return SetError(1, 0, "")

        Local $tCreationTime, $tLastAccessTime, $tLastWriteTime

        Switch $iTime
        Case 1
                $tCreationTime = DllStructCreate($tagFILETIME)
        Case 2
                $tLastAccessTime = DllStructCreate($tagFILETIME)
        Case Else
                $iTime = 3
                $tLastWriteTime = DllStructCreate($tagFILETIME)
        EndSwitch

        Local $iResult
        $iResult = DllCall("Kernel32.dll", "bool", "GetFileTime", _
                        "handle", $hFile, _
                        "ptr", DllStructGetPtr($tCreationTime), _
                        "ptr", DllStructGetPtr($tLastAccessTime), _
                        "ptr", DllStructGetPtr($tLastWriteTime))

        DllCall("Kernel32.dll", "bool", "CloseHandle", "handle", $hFile)
        If ($iResult[0] = 0) Then Return SetError(1, 0, "")

        Local $tFileTime = DllStructCreate($tagFILETIME)
        Local $pFileTime = DllStructGetPtr($tFileTime)

        Local $tSysTime = DllStructCreate($tagSYSTEMTIME)
        Local $pSysTime = DllStructGetPtr($tSysTime)

        DllCall("Kernel32.dll", "bool", "FileTimeToLocalFileTime", "ptr", $iResult[$iTime + 1], "ptr", $pFileTime)
        DllCall("Kernel32.dll", "bool", "FileTimeToSystemTime", "ptr", $pFileTime, "ptr", $pSysTime)

        Local $aResult[7]
        $aResult[0] = DllStructGetData($tSysTime, "Year")
        $aResult[1] = DllStructGetData($tSysTime, "Month")
        $aResult[2] = DllStructGetData($tSysTime, "Day")
        $aResult[3] = DllStructGetData($tSysTime, "Hour")
        $aResult[4] = DllStructGetData($tSysTime, "Minute")
        $aResult[5] = DllStructGetData($tSysTime, "Second")
        $aResult[6] = DllStructGetData($tSysTime, "Milliseconds")

        If $fText Then
                Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d.%03d", $aResult[0], $aResult[1], $aResult[2], $aResult[3], $aResult[4], $aResult[5], $aResult[6])
        Else
                Return $aResult
        EndIf        
EndFunc        ;==>_FileGetTime

评分

参与人数 2贡献 +10 收起 理由
lynfr8 + 5
netegg + 5

查看全部评分

发表于 2011-10-12 19:24:02 | 显示全部楼层
向P版学习啊。。
 楼主| 发表于 2011-10-12 22:12:23 | 显示全部楼层
谢谢老大,哈哈,老大出面就是不一样啊
发表于 2011-10-14 22:50:49 | 显示全部楼层
要这么精确吗?
发表于 2011-10-15 04:51:18 | 显示全部楼层
楼主确实强大~!~试了 确实厉害!!
对windows api不熟悉的路过~!~
发表于 2011-10-16 23:10:35 | 显示全部楼层
又学到点东西,不过暂时还无需这么精确!
发表于 2012-12-23 16:03:57 | 显示全部楼层
毫秒级误差大,没必要吧
发表于 2013-1-18 14:43:49 | 显示全部楼层
谢谢分享。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 06:03 , Processed in 0.082494 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表