Obtenir les Dates d'un Fichier en Temps Universel

Contenu du snippet

Const FILE_SHARE_READ = &O1
Const FILE_SHARE_WRITE = &O2
Const GENERIC_ALL = &H10000000
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const OPEN_EXISTING = 3
Const INVALID_HANDLE_VALUE = -1

Private Type DateFichier
     CreationTime      As Date
     LastAccessTime   As Date
     LastWriteTime     As Date
End Type

Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwSharedMode As Long, ByVal lpSecurityAttributes As Long, 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
Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As Currency, lpLastAccessTime As Currency, lpLastWriteTime As Currency) As Long

Private Function GetDateFichier(FileName As String) As DateFichier
    Dim dt1     As Currency
    Dim dt2     As Currency
    Dim dt3     As Currency
    Dim dt       As Date
    Dim hCrea  As Long
    
    hCrea = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
    If hCrea = INVALID_HANDLE_VALUE Then
       MsgBox "Erreur Lecture: " & FileName
       Exit Function
       End If
       
' renvoie le nombre de 100-nanosecond depuis le 1er Janvier 1601
    GetFileTime hCrea, dt1, dt2, dt3
    CloseHandle (hCrea)
'   conversion en date pour Vb
    dt = (dt1 / 1000 - 9435312000#) / 86400
    GetDateFichier.CreationTime = dt
    dt = (dt2 / 1000 - 9435312000#) / 86400
    GetDateFichier.LastAccessTime = dt
    dt = (dt3 / 1000 - 9435312000#) / 86400
    GetDateFichier.LastWriteTime = dt
    
End Function

'   exemple d'utilisation
    Dim dat As DateFichier
    Dim s   As String
    
    dat = GetDateFichier("C:\autoexec.bat")
    s = "date création........." & dat.CreationTime & vbCrLf
    s = s & "date modification...." & dat.LastWriteTime & vbCrLf
    s = s & "date dernier accès.." & dat.LastAccessTime
    MsgBox s


Compatibilité : VB6

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.