PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 mai 2016
-
Modifié par PWM63 le 24/09/2015 à 16:24
PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 mai 2016
-
24 sept. 2015 à 18:34
Bonjour,
Je cherche à comparer 2 dates, pour cela, j'utilise DateTime.Compare, mais le résultat obtenu n'est pas celui attendu si je m'en réfère à la MSDN.
En effet, j'ai 2 fichiers dont je récupère la date de dernière modification, et dans le cas où les fichiers sont identiques, je dois obtenir 0.
Dans un répertoire test, j'ai 1 fichier dont la date de dernière modification est 24/09/2015 15:01:02.
Dans un répertoire test2, j'ai 1 copie de ce fichier qui a été effectuée via la méthode Io.File.Copy(source, destination) (et non modifié ultérieurement à la copie) et la date de dernière modification est bien la même.
Le code ci-dessous m'affiche ce résultat :
MAJ
Src = c:\test\test1.txt
Date Src = 23/09/2015 16:06:37
Dest = c:\test2\test1.txt
Date Dest = 23/09/2015 16:06:37
Date Compare = 1
Date CompareTo = 1
Or, d'après la MSDN, le résultat devrait être 0.
Bien évidemment, d'après le résultat affiché, je peux mettre 1 pour contourner le problème, sachant que cette solution ne me plait guère, mais je cherche surtout 1 explication.
Pouvez-vous m'aider à comprendre ceci, s'il vous plait, et merci d'avance.
Dim répertoire_source, répertoire_destination, fichier_destination As String
répertoire_source = "c:\test"
répertoire_destination = "c:\test2"
For Each fichier_source As String In IO.Directory.GetFiles(répertoire_source)
fichier_destination = répertoire_destination & "\" & fichier_source.Substring(fichier_source.LastIndexOf("\") + 1)
If IO.File.Exists(fichier_destination) Then
If IO.File.GetLastWriteTime(fichier_source).CompareTo(IO.File.GetLastWriteTime(fichier_destination)) > 0 Then
MsgBox("MAJ" & vbCrLf & "Src = " & fichier_source & vbCrLf & "Date Src = " & IO.File.GetLastWriteTime(fichier_source) & vbCrLf & "Dest = " & fichier_destination & vbCrLf & "Date Dest = " & IO.File.GetLastWriteTime(fichier_destination) & vbCrLf & "Date Compare = " & DateTime.Compare(IO.File.GetLastWriteTime(fichier_source), IO.File.GetLastWriteTime(fichier_destination)) & vbCrLf & "Date CompareTo = " & IO.File.GetLastWriteTime(fichier_source).CompareTo(IO.File.GetLastWriteTime(fichier_destination)))
End If
End If
Next
Edit : VB .Net 2010 Pro, Win 7 Pro SP1
Edit 2 : J'ai contourné le problème par 1 autre méthode qui me convient 1 peu mieux, même si c'est hummm..., mais ceci dit, je ne suis toujours pas avare d'1 explication au problème d'origine, merci.
'...
Dim date_source1, date_source2, date_dest1, date_dest2 As DateTime
'...
date_source1 = IO.File.GetLastWriteTime(fichier_source)
date_source2 = New DateTime(date_source1.Year, date_source1.Month, date_source1.Day, date_source1.Hour, date_source1.Minute, 0)
date_dest1 = IO.File.GetLastWriteTime(fichier_destination)
date_dest2 = New DateTime(date_dest1.Year, date_dest1.Month, date_dest1.Day, date_dest1.Hour, date_dest1.Minute, 0)
If date_source2.CompareTo(date_dest2) > 0 Then
'...
PWM63
Messages postés127Date d'inscriptionlundi 11 octobre 2004StatutMembreDernière intervention18 mai 2016 24 sept. 2015 à 18:34
Bonjour ucfoutu,
En effet, je n'avais pas lu cette remarque, et il est en effet probable que je sois tombé dans ce cas qui semble je suppose rare si ce n'est exceptionnel.
Bref, si c'est bien ce cas, cela répond à mon interrogation, et en tout cas, je m'en satisferai.
Du coup, on peut dire que j'ai eu de la chance que cela se soit produit pendant mes tests, car, avec la méthode de résolution de ce problème que j'ai "trouvé", au moins, maintenant, ce cas est traité pour toutes les fois, et il faudra même que je m'en souvienne pour toutes les fois où je devrais utiliser les dates de fichier.
Donc, merci ucfoutu, et je mets le post en résolu.