Bonsoir à tous
Lorsque je compare deux dates de dernier accès en écriture à deux fichiers avec cette routine, ça fonctionne nickel. Y compris sur de très légères différences (quelques minutes, voire moins) :
Les dates des fichiers sont initialisées comme ceci :
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 procedure TForm1.Btn_1Click(Sender: TObject); Var Date_F_Source, Date_F_Dest : TDateTime; F_Source, F_Dest : string; begin F_Source := 'Unit1.dfm'; // Même jour que F_Dest, l'EXE "fraîchement" recompilé Date_F_Source := TimeModificationFichier(F_Source); Form1.Lab_Aff_F_Source.Caption := F_Source; Form1.Lab_Aff_Date_F_Source.Caption := DateToStr(Date_F_Source); F_Dest := 'Project1.exe'; Date_F_Dest := TimeModificationFichier(F_Dest); Form1.Lab_Aff_Date_F_Dest.Caption := DateToStr(Date_F_Dest); Form1.Lab_Aff_F_Dest.Caption := F_Dest; if Date_F_Source > Date_F_Dest then begin Form1.StatusBar.Panels[0].Text := 'Date ' + UpperCase(F_Source) +' (' +DateToStr(Date_F_Source) + ') SUPERIEURE à ' + DateToStr(Date_F_Dest) +' ' + UpperCase(F_Dest) ; end Else begin Form1.StatusBar.Panels[0].Text := 'Date ' + UpperCase(F_Source) +' (' +DateToStr(Date_F_Source) + ') INFERIEURE à ' + DateToStr(Date_F_Dest) +' ' + UpperCase(F_Dest); end; end;
Là, par contre, le résultat de la comparaison est faux :
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 Function TimeModificationFichier(fichier: string): TDateTime; // Routine empruntée à M. Bardou {===========================================================================} { fonction renvoyant la date et heure de la dernière modification du fichier} {===========================================================================} var SearchRec : TSearchRec; Resultat : longint; begin Result:=0; Resultat:=FindFirst(fichier, FaAnyFile, SearchRec); if Resultat = 0 then Result := FileDateToDateTime(SearchRec.Time); // FileDateToDateTime transforme une date de type dos en format TDateTime FindClose(SearchRec); end;
Pourtant, leurs dates sont initialisées avec la même routine TimeModificationFichier().
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 Function F_Source_Plus_Recent_Que_F_Dest(Date_F_Source, Date_F_Dest : TDateTime) : boolean; Var Val_Retour : boolean; begin Val_Retour := False; // Par défaut, on considère que la date du F_Source n'est PAS PLUS RECENTE // Si date inférieur, alors date ANTERIEURE if Date_F_Source = Date_F_Dest then begin F_Source_Plus_Recent_Que_F_Dest := Val_Retour; Exit; end; if Date_F_Source < Date_F_Dest then begin F_Source_Plus_Recent_Que_F_Dest := Val_Retour; Exit; end; if Date_F_Source > Date_F_Dest then begin Val_Retour := TRue; F_Source_Plus_Recent_Que_F_Dest := Val_Retour; end; end;
Comprends pas. Ca devrait me sauter aux yeux, je le sens. Mais je ne vois rien. Ca vous parle ?
Partager