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

Commentaires et avis

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

Discussions en rapport avec ce code source dans le forum

MODIFIER DATE ET HEURE D'UN FICHIER [ par ccclooo ] Désolé, mais j'ai téchargé le logiciel "MODIFIER DATE ET HEURE D'UN FICHIER" en cliquant sur le lien "téléchargé le Zip", et an décompressant ce zip i Comparer date/heure d'un fichier avec heure systeme [ par guda ] Bonjour, J'ai besoin de chercher dans un repertoire les fichiers dont la date de création excede une heure. Je pensais faire une simple comparaison Changer la date et l'heure systeme avec VBA ou VBS [ par petitmarco ] bonjour, Je débute en VB, particulièrement VBA, et lors d'une application de gestion de stock, je doit changer la date systeme de windows à l'identiqu Date et heure modification d'un fichier sur FTP [ par RJLFRANCE ] Bonjour a tous !Juste une petite question:Comment recuperer la date et l'heure d'un fichier sur un site FTP, genre Filedatetime sur disque dur ?Merci date et heure en nom de fichier.txt [ par houp ] Bonjour Je souhaiterais avoir de l'aide sur un prog que je réalise en vb6.Mon but est d'enregistrer des données dans un fichier texte avec comme nom Ajout de l'heure et de la date dans un fichier texte. [ par norber59480 ] Bonjour tous le monde.J'enregistre des trames dans un fichier texte. Les trames sont ecrite ou fur et a mesure que je les recoit...A ce fichier de tra Modifier date du dernier accès à un fichier [ par lilinath ] Bonjour, Je désire changer la date du dernier accès à un fichier, vidéo. Je n'y arrive pas. Quelqu'un peut il m'aider. Merci pour votre aide,Bonne j DateLastAccessed pour fichier en VB6 [ par DD05 ] Bonjour,Je suis en VB6.Ci-dessous mon code qui me permet de trouver la date et l'heure du dernier accés à un fichier.Le problème c'est qu'il ne me don verifier date et heure [ par mvery ] Bonjour,Mon programme crée un fichier txt contenant la date et l'heure de la derniere action (sauvgarde) réalisé.voici l'aspect du fichier c:\log.txt2 Changer DATE de Windows [ par fabienfs ] Bonjour, Je cherche à pouvoir modifier la date de Windows en VB.Net. Le but n'est donc pas de modifier la date de Windows dans mon appli mai bien mod


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

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

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,842 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.