Un module pour modifier les heures de création, de dernière lecture et de modification d'un fichier en VB.NET
Adapté de souces VB6. Toujours bien utiles les APIs.
Source / Exemple :
Imports VB = Microsoft.VisualBasic
Module FileDate
Private Structure FILETIME
Dim LowDateTime As Integer
Dim HighDateTime As Integer
End Structure
Private Structure SYSTEMTIME
Dim sYear As Short
Dim sMonth As Short
Dim sDayOfWeek As Short
Dim sDay As Short
Dim sHour As Short
Dim sMinute As Short
Dim sSecond As Short
Dim sMilliseconds As Short
End Structure
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As Integer, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integer
Private Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Integer, ByRef lpCreationTime As FILETIME, ByRef lpLastAccessTime As FILETIME, ByRef lpLastWriteTime As FILETIME) As Integer
Private Declare Function SystemTimeToFileTime Lib "kernel32" (ByRef lpSystemTime As SYSTEMTIME, ByRef lpFileTime As FILETIME) As Integer
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" (ByRef lpLocalFileTime As FILETIME, ByRef lpFileTime As FILETIME) As Integer
'Modifi les dates d'un fichier
Public Function FileSetDate(ByVal sFileName As String, ByVal dFileDate As Date, Optional ByRef bSetCreationTime As Boolean = False, Optional ByRef bSetLastAccessedTime As Boolean = False, Optional ByRef bSetLastModified As Boolean = False) As Boolean
Const GENERIC_WRITE As Integer = &H40000000
Const OPEN_EXISTING As Short = 3
Const FILE_SHARE_READ As Short = &H1S
Const FILE_SHARE_WRITE As Short = &H2S
Dim lhwndFile As Integer
Dim tSystemTime As SYSTEMTIME
Dim tLocalTime, tFileTime As FILETIME
tSystemTime.sYear = Year(dFileDate)
tSystemTime.sMonth = Month(dFileDate)
tSystemTime.sDay = VB.Day(dFileDate)
tSystemTime.sDayOfWeek = Weekday(dFileDate) - 1
tSystemTime.sHour = Hour(dFileDate)
tSystemTime.sMinute = Minute(dFileDate)
tSystemTime.sSecond = Second(dFileDate)
tSystemTime.sMilliseconds = 0
'Ouvre le fichier pour obtenir le handle
lhwndFile = CreateFile(sFileName, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
If lhwndFile Then
'Fichier ouvert
'Converti de l'heure systeme a l'heure locale
SystemTimeToFileTime(tSystemTime, tLocalTime)
'Converti l'heure locale en heure GMT
LocalFileTimeToFileTime(tLocalTime, tFileTime)
'Change les propriétés date/time du fichier
FileSetDate = True
If bSetCreationTime Then
FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, tFileTime, Nothing, Nothing))
End If
If bSetLastAccessedTime Then
FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, Nothing, tFileTime, Nothing))
End If
If bSetLastModified Then
FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, Nothing, Nothing, tFileTime))
End If
'Ferme le fichier
Call CloseHandle(lhwndFile)
End If
End Function
End Module
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.