|
Время и дата файла
взято с http://artsoft.agava.ru/rwinapi3.htm#FileDates
PS надо бы переписать чтоб поудобнее было пользоваться
Как узнать дату создания, изменения и доступа к любому файлу? Как изменить эти значения?
' Открывает указанный файл в режиме двоичного доступа.
' Эта функция необходима нам для получения доступа к датам файла и изменения их.
Declare Function lopen& Lib "kernel32" Alias "_lopen" _
(ByVal lpPathName As String, ByVal iReadWrite As Long)
' Закрывает указанный файл.
Declare Function lclose& Lib "kernel32" _
Alias "_lclose" (ByVal hFile As Long)
Public Const READAPI = 0
Public Const WRITEAPI = 1
Public Const READ_WRITE = 2
' Получает информацию из указанного файла о дате времени.
' Аргументы lpCreationTime, lpLastAcccessTime и lpLastWriteTime могут быть
' установлены в ноль (тогда передайте эти аргументы ByVal As Long), если
' вам они не нужны. Дата возращается этой функцией в формате UTC.
Declare Function GetFileTime& Lib "kernel32" _
(ByVal hFile As Long, lpCreationTime As FILETIME, _
lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
' Устанавливает время создания, изменения и последнего доступа к файлу.
Declare Function SetFileTime& Lib "kernel32" _
(ByVal hFile As Long, lpCreationTime As FILETIME, _
lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME)
' 64-битное число, указывающее на прошедшее время
' с 1 января 1601 г. с единицей измерения 100 наносекунд.
Type FILETIME ' 8 бит
dwLowDateTime As Long
dwHighDateTime As Long
End Type
' Записывает аргумент со структурой FILETIME
' во второй аргумент со структурой SYSTEMTIME.
Declare Function FileTimeToSystemTime& Lib "kernel32" _
(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME)
' Записывает аргумент со структурой SYSTEMTIME
' во второй аргумент со структурой FILETIME.
Declare Function SystemTimeToFileTime& Lib "kernel32" _
(lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME)
' Эта структура содержит информацию о времени и дате.
Type SYSTEMTIME ' 16 бит
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
Использование:
Sub Main()
Dim lFileHwnd As Long
Dim lDummy As Long
Dim ftModified As FILETIME
Dim ftCreated As FILETIME
Dim ftAccessed As FILETIME
Dim stCreated As SYSTEMTIME
' Поменяйте C:\AUTOEXEC.BAT на любой другой файл
lFileHwnd = lopen("C:\AUTOEXEC.BAT", READ_WRITE)
GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
FileTimeToSystemTime ftCreated, stCreated
With stCreated
Debug.Print .wDay & "." & .wMonth & "." & .wYear & ", " & _
.wHour & ":" & .wMinute & ":" & .wSecond & ":" & .wMilliseconds
End With
' Увеличивает год создания файла на 5
stCreated.wYear = stCreated.wYear + 5
SystemTimeToFileTime stCreated, ftCreated
SetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
' Проверка
GetFileTime lFileHwnd, ftCreated, ftAccessed, ftModified
FileTimeToSystemTime ftCreated, stCreated
With stCreated
Debug.Print .wDay & "." & .wMonth & "." & .wYear
End With
lDummy = lclose(lFileHwnd)
End Sub
| |