利用以下模块修改文件创建时间等属性,为何我用
SetTime "c:\abc.txt", #12/20/1999 1:01:01 AM#, #8/8/2002 3:21:00 AM#, #7/1/1997 12:50:11 AM#
可以成功修改。而用
SetTime "c:\abc.txt", datevalue(text1.text), datevalue(text2.text), datevalue(text3.text)
却只能修改年月日,而时分秒全是0
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Const OFS_MAXPATHNAME = 128
Public Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type
Public Const OF_READ = &H0
Public Const OF_READWRITE = &H2
Public 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
Public Type TIME_ZONE_INFORMATION
bias As Long
StandardName(32) As Integer
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(32) As Integer
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Public Type BY_HANDLE_FILE_INFORMATION
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
dwVolumeSerialNumber As Long
nFileSizeHigh As Long
nFileSizeLow As Long
nNumberOfLinks As Long
nFileIndexHigh As Long
nFileIndexLow As Long
End Type
Public Declare Function GetFileInformationByHandle Lib "kernel32" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Public Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Public Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Public Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Dim FileHandle As Long
Dim OpenBuff As OFSTRUCT
Dim tZone As TIME_ZONE_INFORMATION
Dim sCreate As SYSTEMTIME
Dim sAccess As SYSTEMTIME
Dim sWrite As SYSTEMTIME
Dim fCreate As FILETIME
Dim fAccess As FILETIME
Dim fWrite As FILETIME
Dim bias As Long
Dim theTime As Date
Dim FileInfo As BY_HANDLE_FILE_INFORMATION
Public Enum FileTimeOptions
theCreateTime = 1
theLastAccessTime = 2
theLastWriteTime = 3
End Enum
Public Sub SetTime(ByVal FileName As String, ByVal CreateTime As Date, ByVal LastAccessTime As Date, ByVal LastWriteTime As Date)
'1,处理文件属性,去掉只读等属性,
If Dir(FileName, 63) = "" Then Exit Sub
SetAttr FileName, vbNormal
'2,处理时差
GetTimeZoneInformation tZone
bias = tZone.bias '时差,以分钟为单位,中国地区为早8小时,值-480。
theTime = TimeSerial(0, bias, 0)
CreateTime = CreateTime + theTime
LastAccessTime = LastAccessTime + theTime
LastWriteTime = LastWriteTime + theTime
'3,将SYSTEMTIME格式时间转换为FILETIME格式时间
sCreate.wDay = Day(CreateTime): sCreate.wHour = Hour(CreateTime): sCreate.wMinute = Minute(CreateTime): sCreate.wMonth = Month(CreateTime): sCreate.wSecond = Second(CreateTime): sCreate.wYear = Year(CreateTime)
sAccess.wDay = Day(LastAccessTime): sAccess.wHour = Hour(LastAccessTime): sAccess.wMinute = Minute(LastAccessTime): sAccess.wMonth = Month(LastAccessTime): sAccess.wSecond = Second(LastAccessTime): sAccess.wYear = Year(LastAccessTime)
sWrite.wDay = Day(LastWriteTime): sWrite.wHour = Hour(LastWriteTime): sWrite.wMinute = Minute(LastWriteTime): sWrite.wMonth = Month(LastWriteTime): sWrite.wSecond = Second(LastWriteTime): sWrite.wYear = Year(LastWriteTime)
SystemTimeToFileTime sCreate, fCreate
SystemTimeToFileTime sAccess, fAccess
SystemTimeToFileTime sWrite, fWrite
'4,修改文件时间
FileHandle = OpenFile(FileName, OpenBuff, OF_READWRITE)
SetFileTime FileHandle, fCreate, fAccess, fWrite '注:这里的三个时间采用的是格林尼治标准时间!
CloseHandle FileHandle
End Sub
Public Function GetTime(ByVal FileName As String, Optional ByVal TimeOfFile As FileTimeOptions = theCreateTime) As Date
If Dir(FileName, 63) = "" Then Exit Function
FileHandle = OpenFile(FileName, OpenBuff, OF_READ)
GetFileInformationByHandle FileHandle, FileInfo
CloseHandle FileHandle
GetTimeZoneInformation tZone
bias = tZone.bias
FileTimeToSystemTime FileInfo.ftCreationTime, sCreate
FileTimeToSystemTime FileInfo.ftLastAccessTime, sAccess
FileTimeToSystemTime FileInfo.ftLastWriteTime, sWrite
Dim CurTime As SYSTEMTIME
Select Case TimeOfFile
Case 1
CurTime = sCreate
Case 2
CurTime = sAccess
Case 3
CurTime = sWrite
End Select
GetTime = DateSerial(CurTime.wYear, CurTime.wMonth, CurTime.wDay) + TimeSerial(CurTime.wHour, CurTime.wMinute - bias, CurTime.wSecond)
End Function
SetTime "c:\abc.txt", #12/20/1999 1:01:01 AM#, #8/8/2002 3:21:00 AM#, #7/1/1997 12:50:11 AM#
可以成功修改。而用
SetTime "c:\abc.txt", datevalue(text1.text), datevalue(text2.text), datevalue(text3.text)
却只能修改年月日,而时分秒全是0
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Const OFS_MAXPATHNAME = 128
Public Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type
Public Const OF_READ = &H0
Public Const OF_READWRITE = &H2
Public 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
Public Type TIME_ZONE_INFORMATION
bias As Long
StandardName(32) As Integer
StandardDate As SYSTEMTIME
StandardBias As Long
DaylightName(32) As Integer
DaylightDate As SYSTEMTIME
DaylightBias As Long
End Type
Public Type BY_HANDLE_FILE_INFORMATION
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
dwVolumeSerialNumber As Long
nFileSizeHigh As Long
nFileSizeLow As Long
nNumberOfLinks As Long
nFileIndexHigh As Long
nFileIndexLow As Long
End Type
Public Declare Function GetFileInformationByHandle Lib "kernel32" (ByVal hFile As Long, lpFileInformation As BY_HANDLE_FILE_INFORMATION) As Long
Public Declare Function GetTimeZoneInformation Lib "kernel32" (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Public Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Public Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Public Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Dim FileHandle As Long
Dim OpenBuff As OFSTRUCT
Dim tZone As TIME_ZONE_INFORMATION
Dim sCreate As SYSTEMTIME
Dim sAccess As SYSTEMTIME
Dim sWrite As SYSTEMTIME
Dim fCreate As FILETIME
Dim fAccess As FILETIME
Dim fWrite As FILETIME
Dim bias As Long
Dim theTime As Date
Dim FileInfo As BY_HANDLE_FILE_INFORMATION
Public Enum FileTimeOptions
theCreateTime = 1
theLastAccessTime = 2
theLastWriteTime = 3
End Enum
Public Sub SetTime(ByVal FileName As String, ByVal CreateTime As Date, ByVal LastAccessTime As Date, ByVal LastWriteTime As Date)
'1,处理文件属性,去掉只读等属性,
If Dir(FileName, 63) = "" Then Exit Sub
SetAttr FileName, vbNormal
'2,处理时差
GetTimeZoneInformation tZone
bias = tZone.bias '时差,以分钟为单位,中国地区为早8小时,值-480。
theTime = TimeSerial(0, bias, 0)
CreateTime = CreateTime + theTime
LastAccessTime = LastAccessTime + theTime
LastWriteTime = LastWriteTime + theTime
'3,将SYSTEMTIME格式时间转换为FILETIME格式时间
sCreate.wDay = Day(CreateTime): sCreate.wHour = Hour(CreateTime): sCreate.wMinute = Minute(CreateTime): sCreate.wMonth = Month(CreateTime): sCreate.wSecond = Second(CreateTime): sCreate.wYear = Year(CreateTime)
sAccess.wDay = Day(LastAccessTime): sAccess.wHour = Hour(LastAccessTime): sAccess.wMinute = Minute(LastAccessTime): sAccess.wMonth = Month(LastAccessTime): sAccess.wSecond = Second(LastAccessTime): sAccess.wYear = Year(LastAccessTime)
sWrite.wDay = Day(LastWriteTime): sWrite.wHour = Hour(LastWriteTime): sWrite.wMinute = Minute(LastWriteTime): sWrite.wMonth = Month(LastWriteTime): sWrite.wSecond = Second(LastWriteTime): sWrite.wYear = Year(LastWriteTime)
SystemTimeToFileTime sCreate, fCreate
SystemTimeToFileTime sAccess, fAccess
SystemTimeToFileTime sWrite, fWrite
'4,修改文件时间
FileHandle = OpenFile(FileName, OpenBuff, OF_READWRITE)
SetFileTime FileHandle, fCreate, fAccess, fWrite '注:这里的三个时间采用的是格林尼治标准时间!
CloseHandle FileHandle
End Sub
Public Function GetTime(ByVal FileName As String, Optional ByVal TimeOfFile As FileTimeOptions = theCreateTime) As Date
If Dir(FileName, 63) = "" Then Exit Function
FileHandle = OpenFile(FileName, OpenBuff, OF_READ)
GetFileInformationByHandle FileHandle, FileInfo
CloseHandle FileHandle
GetTimeZoneInformation tZone
bias = tZone.bias
FileTimeToSystemTime FileInfo.ftCreationTime, sCreate
FileTimeToSystemTime FileInfo.ftLastAccessTime, sAccess
FileTimeToSystemTime FileInfo.ftLastWriteTime, sWrite
Dim CurTime As SYSTEMTIME
Select Case TimeOfFile
Case 1
CurTime = sCreate
Case 2
CurTime = sAccess
Case 3
CurTime = sWrite
End Select
GetTime = DateSerial(CurTime.wYear, CurTime.wMonth, CurTime.wDay) + TimeSerial(CurTime.wHour, CurTime.wMinute - bias, CurTime.wSecond)
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货