Изменить дату и время создания файла - VBA
Формулировка задачи:
Можно ли средствами VBA изменить дату создания текстового файла?
Решение задачи: «Изменить дату и время создания файла»
textual
Листинг программы
- Option Explicit
- Public Const GENERIC_WRITE = &H40000000, GENERIC_READ = &H80000000, FILE_ATTRIBUTE_NORMAL = &H80, OPEN_EXISTING = 3
- Public Type FileTime: dwLowDateTime As Long: dwHighDateTime As Long: End Type
- 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
- Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFilename As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
- Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FileTime, lpLastAccessTime As FileTime, lpLastWriteTime As FileTime) As Long
- Declare Function SystemTimeToFileTime Lib "kernel32" (lpSystemTime As SYSTEMTIME, lpFileTime As FileTime) As Long
- Declare Function LocalFileTimeToFileTime Lib "kernel32" (lpFileTime As FileTime, lpLocalFileTime As FileTime) As Long
- Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
- Function DTtoFT(ByVal DT As Date) As FileTime
- Dim ST As SYSTEMTIME, lTime As FileTime
- ST.wYear = Year(DT): ST.wMonth = Month(DT): ST.wDay = Day(DT): ST.wHour = Hour(DT): ST.wMinute = Minute(DT): ST.wSecond = Second(DT)
- SystemTimeToFileTime ST, lTime
- LocalFileTimeToFileTime lTime, DTtoFT
- End Function
- Sub GetFTime(fName As String, Creation As Date, LastAccess As Date, LastWrite As Date)
- Dim hFile As Long, ct As FileTime, at As FileTime, wt As FileTime
- hFile = CreateFile(fName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
- GetFileTime hFile, ct, at, wt
- CloseHandle hFile
- Creation = FTtoDT(ct): LastAccess = FTtoDT(at): LastWrite = FTtoDT(wt)
- End Sub
- Sub SetFTime(fName As String, Optional Creation As Date = -657434, Optional LastAccess As Date = -657434, Optional LastWrite As Date = -657434)
- Dim hFile As Long, ct As Date, at As Date, wt As Date
- If Creation = -657434 Or LastAccess = -657434 Or LastWrite = -657434 Then
- GetFTime fName, ct, at, wt
- If Creation = -657434 Then Creation = ct
- If LastAccess = -657434 Then LastAccess = at
- If LastWrite = -657434 Then LastWrite = wt
- End If
- hFile = CreateFile(fName, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
- SetFileTime hFile, DTtoFT(Creation), DTtoFT(LastAccess), DTtoFT(LastWrite)
- CloseHandle hFile
- End Sub
- Sub SetFT()
- Dim T1 As Date, T2 As Date, T3 As Date
- T1 = Now 'Creation As Date - сейчас
- T2 = T1 + 2 'LastAccess As Date - послезавтра в это же время
- T3 = T1 + 1 'LastWrite As Date - завтра в это же время
- 'собственно примерчик
- SetFTime "d:\tmp\123.txt", T1, T2, T3
- '
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д