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) :

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;
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
 
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;
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
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;
Pourtant, leurs dates sont initialisées avec la même routine TimeModificationFichier().

Comprends pas. Ca devrait me sauter aux yeux, je le sens. Mais je ne vois rien. Ca vous parle ?