Récupérer la date de dernière modification d'un fichier sur un serveur FTP.

cs_JMV83 Messages postés 1 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 7 octobre 2005 - 7 oct. 2005 à 09:28
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 7 oct. 2005 à 14:38
Bonjour,

Voici un problème que je n'arrive pas à résoudre et pour lequel je sollicite
votre expertise.

J'essaie de récupérer la date de dernière modification d'un fichier sur un
serveur FTP.

Pour cela, j'utilise le code suivant :

Module TEST

Public Const MAX_PATH As Short = 260

Public Structure FILETIME
Public dwLowDateTime As Integer
Public dwHighDateTime As Integer
End Structure

Public Structure WIN32_FIND_DATA
Public dwFileAttributes As Integer
Public ftCreationTime As FILETIME
Public ftLastAccessTime As FILETIME
Public ftLastWriteTime As FILETIME
Public nFileSizeHigh As Integer
Public nFileSizeLow As Integer
Public dwReserved0 As Integer
Public dwReserved1 As Integer

<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.Unm
anagedType.ByValTStr, SizeConst:=MAX_PATH)> _
Public cFileName As String

<System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.Unm
anagedType.ByValTStr, SizeConst:=14)> _
Public cAlternateFileName As String
End Structure

Public Structure SYSTEMTIME
Public wYear As Integer
Public wMonth As Integer
Public wDayOfWeek As Integer
Public wDay As Integer
Public wHour As Integer
Public wMinute As Integer
Public wSecond As Integer
Public wMilliseconds As Integer
End Structure

Public Declare Function FileTimeToLocalFileTime Lib "kernel32" ( _
ByVal lpFileTime As FILETIME, _
ByVal lpLocalFileTime As FILETIME) As Long

Public Declare Function FileTimeToSystemTime Lib "kernel32" ( _
ByVal lpFileTime As FILETIME, _
ByVal lpSystemTime As SYSTEMTIME) As Long

Function testdate1()

Dim fData As WIN32_FIND_DATA
Dim St As SYSTEMTIME
Dim Ft1 As FILETIME
Dim Ft2 As FILETIME

' ****** incomplet ********
' Connexion sur le serveur FTP ...
internet_ok = InternetOpen("PutFtpFile", 1, "", "", 0)
ftp_ok = InternetConnect(internet_ok, serveur_ftp, 21, login,
mot_passe, 1, &H8000000, 0)
select_rep = FtpSetCurrentDirectory(ftp_ok, rep)
FtpFindFirstFile(ftp_ok, "*.*", fData, 0, 0)

' ******

Ft1 = fData.ftLastWriteTime

' Conversion File Time en Local File Time

retour1 = FileTimeToLocalFileTime(Ft1, Ft2)

End Function

End Module

Lorsque je fais tourner ce code, je récupère bien dans la structure fData
les paramètres qui m'interessent :

fData.cFileName : Contient le nom du fichier concerné,
fData.nFileSizeLow : Contient la taille du fichier.
fData.ftCreationTime et fData.ftLastAccessTime = 0 (ce qui d'après ce que
j'ai lu sur Internet semble
cohérent).

En revanche, fData.fLastWriteTime n'est pas vide.
La structure FILETIME associée à fLastWriteTime contient les valeurs :

dwHighDateTime : 29731569
dwLowDateTime : -1208734720

Ceci m'amène à vous poser une première question : Est-ce que les valeurs
ci-dessus vous
semblent correctes ?

Lorsque j'exécute le code de la fonction testdate1(), j'obtient lors de
l'exécution
de FileTimeToLocalFileTime(Ft1, Ft2) le message d'erreur suivant :

"Une exception non gérée du type 'System.NullReferenceException' s'est
produite dans
toto.exe.
La référence d'objet n'est pas définie à une instance d'un objet".

Voila.

Merci d'avance pour toute aide que vous pourrez m'apporter.

Jean-Marc

1 réponse

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
7 oct. 2005 à 14:38
Je pense que cela devrait résoudre ton problème. C'est du vb6 mais bon c'est relativement la meme chose sur la conversion
Si ta besoin d'aide fais signe :)
http://www.vb-helper.com/howto_file_times.html


Si la réponse te conviens merci de l'accepter
0
Rejoignez-nous