Obtenir la date d'un fichier [Résolu]

Messages postés
562
Date d'inscription
samedi 10 janvier 2004
Dernière intervention
11 octobre 2010
- - Dernière réponse : Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
- 6 nov. 2005 à 01:22
SLt a tous,

J'ai un gros problème, j'aimerais savoir comment on peut obtenir la
date de modification d'un fichier pour ensuite pour pouvoir la comparer
à une autre.

Merci de vos réponses.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
34
Date d'inscription
mardi 18 juin 2002
Dernière intervention
22 novembre 2005
3
Merci
Bonsoir,
Exemple avec DateLastModified

Dim Path
Path = "d:\KRNSDE"


MsgBox ShowFolderList(Path),vbmessage,"Fichiers présents dans le répertoire"
Function ShowFolderList(strPath)
Dim fso, Dossiers, fic, fichiers, strListe, f, fdate, fname, dtDiffFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossiers = fso.GetFolder(path)
Set fic = Dossiers.Files


For Each fichiers in fic
Set f = fso.GetFile(fichiers)
fdate = f.DateLastModified
fname = f.Name
dtDiffFile = DateDiff("d", Now, fdate)
If dtDiffFile <= -5 Then
MsgBox "Le fichier " & Path & fname & " sera supprimé car créé le " & fdate
' fso.DeleteFile(Path & fname)
Else
MsgBox "Le fichier " & Path & fname & " ne sera pas supprimé car créé le " & fdate
End If
strListe = strListe & vbcrlf & vbcrlf & fname & " " & fdate
Next
ShowFolderList = strListe
End Function

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Dernière intervention
11 mars 2006
25
0
Merci
Bonsoir,

Bien que tu ais la réponse à ta question, voici une code qui te donne
les dates de création, de modification et d'accession à un fichier.



Private Sub Command1_Click()

Dim fso As Object, f

Set fso = CreateObject("Scripting.FileSystemObject")

On Error GoTo Fin

Set f = fso.GetFile("C:\MonFichier.txt")

MsgBox "Créé le : " & f.DateCreated

MsgBox " Modifié le : " & f.DateLastModified

MsgBox "Accédé le : " & f.DateLastAccessed

Set f = Nothing

Fin:

Set fso = Nothing

End Sub



jpleroisse
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
16
0
Merci
j'aime pas fso !

' le plus simple


MsgBox FileDateTime(nom)





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 Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As Currency, lpLocalFileTime As Currency) As Long



Dim dt1 As Currency

Dim dt2 As Currency

Dim dt3 As Currency

Dim dt As Date

Dim hCrea As Long


hCrea = CreateFile(nom, GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

If hCrea = INVALID_HANDLE_VALUE Then MsgBox "Erreur Lecture: " & nom: Exit Sub

GetFileTime hCrea, dt1, dt2, dt3

CloseHandle (hCrea)



'pour chacune des trois dates:



' en Universel

dt = (dt1 / 1000 - 9435312000#) / 86400

MsgBox dt

' en heure d'hiver

dt = (dt1 / 1000 - 9435308400#) / 86400

MsgBox dt

' en heure d'été

dt = (dt1 / 1000 - 9435304800#) / 86400

MsgBox dt

' en heure Locale

FileTimeToLocalFileTime dt1, Cur

dt = (Cur / 1000 - 9435312000#) / 86400


MsgBox dt







Daniel
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
34
0
Merci
Bravo, enfin du vrai code.
FSO c'est attacher une remorque derrière une 2cv, vb n'est déjà pas violent, inutile de le ralentir encore en chargeant une machine script par dessus.

Gobillot > tu peux faire idem sans ouvrir avec CreateFile, pourrait rater si un prog a déjà ouvert en exclusif. FindFirstFile et tu fais un CopyMemory sur les 2 champs de WIN32_FIND_DATA.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Dernière intervention
31 mars 2015
16
0
Merci
pas de problème

CopyMemory pas nécessaire, résultat directement en Currency









Const MAX_PATH = 260

Const FILE_SHARE_READ = &O1

Const FILE_SHARE_WRITE = &O2

Private Const GENERIC_ALL = &H10000000

Private Const GENERIC_READ = &H80000000

Const GENERIC_WRITE = &H40000000

Const OPEN_EXISTING = 3

Const INVALID_HANDLE_VALUE = -1



Private Type WIN32_FIND_DATA

dwFileAttributes As Long

ftCreationTime As Currency

ftLastAccessTime As Currency

ftLastWriteTime As Currency

nFileSizeHigh As Long

nFileSizeLow As Long

dwReserved0 As Long

dwReserved1 As Long

cFileName As String * MAX_PATH

cAlternate As String * 14

End Type


Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As
WIN32_FIND_DATA) As Long

Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As
WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "kernel32" (ByVal hFile As Long) As Long



Dim FindData As WIN32_FIND_DATA

Dim Cur As Currency

Dim nom As String

Dim hfind As Long

Dim dt As Date



nom = "C:\WINDOWS\explorer.exe"



hfind = FindFirstFile(nom, FindData)

If hfind = INVALID_HANDLE_VALUE Then MsgBox "Erreur Lecture: " & nom: Exit Sub

FindClose hfind



FileTimeToLocalFileTime FindData.ftLastWriteTime, Cur

dt = (Cur / 1000 - 9435312000#) / 86400

MsgBox "date de création = " & dt



NB: en fait la transformation en Temps Local n'est pas très heureuse

autant le temps universel ne changera pas, que le temps en Local ne sera

pas le même en été et en hiver.

le fichier n'aura donc pas la même date (date affichée) suivant qu'on est

en été ou en hiver.


Daniel

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.