取或改文件的创建时间,修改时间,访问时间

Option Explicit

Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type
Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long

Private 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

Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long

Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const FILE_FLAG_BACKUP_SEMANTICS = &H2000000

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _
    lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'返回文件的创建时间,修改时间,访问时间
Public Function FileTimeGet(Optional sFileName As String) As String
    Dim lFileHandle As Long
    Dim dtFile(2) As FILETIME, sysDate As SYSTEMTIME, iI As Long
    
    If Dir(sFileName) = "" Or sFileName = "" Then
        Exit Function
    End If
    
    lFileHandle = CreateFile(sFileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, _
            ByVal 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, ByVal 0)
    Call GetFileTime(lFileHandle, dtFile(0), dtFile(2), dtFile(1))
    Call CloseHandle(lFileHandle)
    For iI = LBound(dtFile) To UBound(dtFile)
        Call FileTimeToLocalFileTime(dtFile(iI), dtFile(iI))
        Call FileTimeToSystemTime(dtFile(iI), sysDate)
        FileTimeGet = FileTimeGet + IIf(FileTimeGet = "", "", vbTab) & _
            Format(sysDate.wYear, "0000") + ":" + _
            Format(sysDate.wMonth, "00") + ":" + _
            Format(sysDate.wDay, "00") + " " + _
            Format(sysDate.wHour, "00") + ":" + _
            Format(sysDate.wMinute, "00") + ":" + _
            Format(sysDate.wSecond, "00")
    Next
End Function

'设置文件的创建时间,修改时间,访问时间
Public Sub FileTimeSet(Optional sFileName As String, Optional dtCreationTime As Date, _
    Optional dtLastWriteTime As Date, Optional dtLastAccessTime As Date)
    Dim lFileHandle As Long
    Dim dtFile(2) As FILETIME, sysDate As SYSTEMTIME, iI As Long
    
    If Dir(sFileName) = "" Or sFileName = "" Then
        Exit Sub
    End If
    
    lFileHandle = CreateFile(sFileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, _
            ByVal 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, ByVal 0)
    Call GetFileTime(lFileHandle, dtFile(0), dtFile(1), dtFile(2))
    If Not IsMissing(dtCreationTime) And dtCreationTime <> 0 Then
        With sysDate
            .wYear = Year(dtCreationTime)
            .wMonth = Month(dtCreationTime)
            .wDay = Day(dtCreationTime)
            .wHour = Hour(dtCreationTime)
            .wMinute = Minute(dtCreationTime)
            .wSecond = Second(dtCreationTime)
            .wMilliseconds = Timer * 100 Mod 1000
        End With
        Call SystemTimeToFileTime(sysDate, dtFile(0))
        Call LocalFileTimeToFileTime(dtFile(0), dtFile(0))
    End If
    
    If Not IsMissing(dtLastAccessTime) And dtLastAccessTime <> 0 Then
        With sysDate
            .wYear = Year(dtLastAccessTime)
            .wMonth = Month(dtLastAccessTime)
            .wDay = Day(dtLastAccessTime)
            .wHour = Hour(dtLastAccessTime)
            .wMinute = Minute(dtLastAccessTime)
            .wSecond = Second(dtLastAccessTime)
            .wMilliseconds = Timer * 100 Mod 1000
        End With
        Call SystemTimeToFileTime(sysDate, dtFile(1))
        Call LocalFileTimeToFileTime(dtFile(1), dtFile(1))
    End If
    
    If Not IsMissing(dtLastWriteTime) And dtLastWriteTime <> 0 Then
        With sysDate
            .wYear = Year(dtLastWriteTime)
            .wMonth = Month(dtLastWriteTime)
            .wDay = Day(dtLastWriteTime)
            .wHour = Hour(dtLastWriteTime)
            .wMinute = Minute(dtLastWriteTime)
            .wSecond = Second(dtLastWriteTime)
            .wMilliseconds = Timer * 100 Mod 1000
        End With
        Call SystemTimeToFileTime(sysDate, dtFile(2))
        Call LocalFileTimeToFileTime(dtFile(2), dtFile(2))
    End If
    
    Call SetFileTime(lFileHandle, dtFile(0), dtFile(1), dtFile(2))
    Call CloseHandle(lFileHandle)
End Sub


 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值