Setfiledate

Contenu du snippet

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.

Du même auteur (hugoclavet)