begin process at 2008 07 19 08:49:33
1 212 721 membres
60 nouveaux aujourd'hui
14 165 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SETFILEDATE


Information sur la source

Description

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

  • 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
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
  • signaler à un administrateur
    Commentaire de NHenry le 11/04/2007 11:15:40

    Bonjour,

    Je vais être critique, mais en VB.NET il y a plus simple :
    IO.File.Get/Set LastAccessTime
    Pareil pour création et modification.

    Sinon pour ta fonction :
    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

    Le prototype est beaucoup trop long :
    Public Function FileSetDate(byval pFileName as string,byval pDate as date, byval pDates as EDates) as Boolean

    Avec :
    Enum EDates
        Creation=1
        LastAccess=2
        LastModifi=4
    end Enum


    Exemple d'appel :
    FileSetDate("c:\fichier.txt",#10/10/2007#,EDates.Creation or EDates.LastAccess)

    Et pour tes tests :
    #  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

    devient :
    #  If (pDates and EDates.Creation)>0 Then
    # FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, tFileTime, Nothing, Nothing))
    # End If
    # If (pDates and EDates.LastAccess)>0 Then
    # FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, Nothing, tFileTime, Nothing))
    # End If
    # If (pDates and EDates.LastModifi)>0 Then
    # FileSetDate = FileSetDate And CBool(SetFileTime(lhwndFile, Nothing, Nothing, tFileTime))
    # End If

    C'est plus simple.

  • signaler à un administrateur
    Commentaire de OneHacker le 11/04/2007 12:06:03

    C'est vrai. Et aussi oubli les apis en VB.NET les API c'est plutôt en VB6.

  • signaler à un administrateur
    Commentaire de hvb le 11/04/2007 17:19:30

    non on oublie pas les api en vb.net, on preferera utiliser les fonctions equivalentes integrées au framework, certes, mais certaines api n'ont pas d'equivalent .NET

  • signaler à un administrateur
    Commentaire de OneHacker le 11/04/2007 18:31:05

    C'est vrai comme pour ouvrir les lecteurs CD :p Ou encore un fichier sont en VB.NET 2003.

  • signaler à un administrateur
    Commentaire de hugoclavet le 12/04/2007 00:18:15

    Merci beaucoup. Je préfère aussi utiliser les fonction du framework, mais là, je n'avais pas trouvé ça.
    Je trouvais ça bizare d'être le premier a poster un code la dessus.
    Si par hasard quelqu'un sait comment faire la même chose en asp, se serait bien apprécié.
    Je développe un genre de client FTP. A chaque download ou upload, le fichier transféré change de date. Sur le serveur les secondes sont arrondi sans parler des conversions de fuseau horaire. Et le comble, si je download un fichier du server, la date du fichier du serveur change (bizare). Je dois donc trouver une façon de corriger les dates aprés chaque transfert. Coté local, pas de problème mais pour changer les dates du fichier coté serveur ???

  • signaler à un administrateur
    Commentaire de MadM@tt le 12/04/2007 20:58:03

    argh ! on va pas reprocher à quelqu'un qui utilise du .net de se servir des api ! C'est si rare ^^
    Vive les api ^^

  • signaler à un administrateur
    Commentaire de aryanamaria le 18/07/2007 15:32:29

    c'est quoi les api

  • signaler à un administrateur
    Commentaire de MadM@tt le 18/07/2007 20:20:04

    Pour faire rapide les API sont des fonctions développées par microsoft pour nous faciliter la programmation à nous, programmeurs. La plupart concernent des fonctions pour agir sur windows et le système, ou alors pour faire des trucs graphiques etc... C'est très varié. Et ces fonctions sont contenues dans les DLL (par exemple kernel32.dll, ou user32.dll)

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS