Это имело бы смысл, если бы я находился в часовом поясе ± 5 часов, но я нахожусь в GMT -06: 00, поэтому я не уверен, являются ли часовые пояса моей проблемой или это что-то еще.Вот мой код, который я использую:
Private Sub SetFileTimes(file As String, Optional creationTime As Date, Optional accessTime As Date, Optional writeTime As Date)
Dim handle As Long
Dim sysCreationTime As FileTime, sysAccessTime As FileTime, sysWriteTime As FileTime
Dim SECURITY_ATTRIBUTES As SecurityAttributes
SECURITY_ATTRIBUTES.nLength = Len(SECURITY_ATTRIBUTES)
SECURITY_ATTRIBUTES.lpSecurityDescriptor = 0
SECURITY_ATTRIBUTES.bInheritHandle = False
handle = CreateFile(file & Chr$(0), GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, SECURITY_ATTRIBUTES, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0&)
Debug.Assert handle <> -1
GetFileTime handle, sysCreationTime, sysAccessTime, sysWriteTime
If creationTime <> 0 Then
SystemTimeToFileTime GetSystemTime(creationTime), sysCreationTime
End If
If accessTime <> 0 Then
SystemTimeToFileTime GetSystemTime(accessTime), sysAccessTime
End If
If writeTime <> 0 Then
SystemTimeToFileTime GetSystemTime(writeTime), sysWriteTime
End If
SetFileTime handle, sysCreationTime, sysAccessTime, sysWriteTime
CloseHandle handle
End Sub
Private Function GetSystemTime(datetime As Date) As SystemTime
GetSystemTime.Year = Year(datetime)
GetSystemTime.Month = Month(datetime)
GetSystemTime.Day = Day(datetime)
GetSystemTime.Hour = Hour(datetime)
GetSystemTime.Minute = Minute(datetime)
GetSystemTime.Second = Second(datetime)
GetSystemTime.Milliseconds = 0
End Function
Функция работает, но у меня все время на 5 часов раньше.(IE Если я попытаюсь установить дату на 10 утра, вместо этого она будет установлена на 5 утра.) Время по умолчанию (которое я не определяю) не меняется, как ожидалось.Во время отладки я вижу, что SystemTimeToFileTime
возвращает значение меньше, чем должно быть.Что я могу сделать, чтобы это исправить?