Bonjour à tous
Je veux comparer les dates de deux fichiers à la seconde près. Or, L'API CompareFileTime() me retourne une réponse fausse. Je dois mal l'interpréter.
Je lis les dates des fichiers, j'appelle la comparaison, et j'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Variable globales : Nom_F1, Nom_F2 : string; Creation_F1, Der_Acces_F1, Der_Ecriture_F1 : TFileTime; Creation_F2, Der_Acces_F2, Der_Ecriture_F2 : TFileTime; Chn_Resultat_Comparaison_Dates : string; // Pr vérifier le résultat ds un mémo
Où est-ce que je me plante ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 procedure TForm1.Btn_1Click(Sender: TObject); begin Lire_Date_F; Comparer_Dates; Aff_Dates_Fichiers; end; Procedure Lire_Date_F; Var Handle_F : integer; Retour_GetFileTime : boolean; begin // Creation_F1, Der_Acces_F1, Der_Ecriture_F1 : TFileTime; Handle_F := FileOPen(Nom_F1, GENERIC_READ); Retour_GetFileTime := GetFileTime(Handle_F, @Creation_F1, @Der_Acces_F1, @Der_Ecriture_F1); FileClose(Handle_F); Handle_F := FileOPen(Nom_F2, GENERIC_READ); Retour_GetFileTime := GetFileTime(Handle_F, @Creation_F2, @Der_Acces_F2, @Der_Ecriture_F2); FileClose(Handle_F); end; Procedure Comparer_Dates; Var Retour_Comparaison : LongInt; begin // LONG WINAPI CompareFileTime( _In_ const FILETIME *lpFileTime1, _In_ const FILETIME *lpFileTime2 ); // CompareFileTime() est ici : https://msdn.microsoft.com/en-us/library/windows/desktop/ms724214%28v=vs.85%29.aspx Retour_Comparaison := CompareFileTime(Der_Ecriture_F1, Der_Ecriture_F2); CASE Retour_Comparaison OF 0 : begin Chn_Resultat_Comparaison_Dates := Nom_F1 + ' et ' + Nom_F2 +'ont le MEME AGE'; end; -1 : begin Chn_Resultat_Comparaison_Dates := Nom_F1 + ' plus RECENT que ' + ExtractFileName(Nom_F2); end; 1 : begin Chn_Resultat_Comparaison_Dates := Nom_F1 + ' plus ANCIEN que ' + ExtractFileName(Nom_F2); // C'est ici que c'est faux : dernier accès dans le fichier 1 : aujourd'hui end; END; // Case end; // Pour convertir la date des fichiers en date affichable (string) : Function FileTimeToDateTime(FileTime: TFileTime): TDateTime; var ModifiedTime: TFileTime; SystemTime: TSystemTime; begin try FileTimeToLocalFileTime(FileTime, ModifiedTime); FileTimeToSystemTime(ModifiedTime, SystemTime); Result := SystemTimeToDateTime(SystemTime); except Result := Now; // Si une erreur se produit end; end;
Partager