Bug difficile sur un tableau dynamique, avec fonction fichier d'ici
Bonjour à tous :)
Je liste, dans un tableau dynamique de structures, quelques informations sur des fichiers. Type de la structure :
Code:
1 2 3 4 5 6 7
|
Type Infos_F = record
Nom_Cplt_F : string; // avec son path
Nom_Court_F : string; // sans son path
Surface_F : int64;
Date_Der_Modif : TDateTime;
end; |
Ma procédure :
Code:
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
|
Procedure Remplir_Tab_F_Source;
Var i : integer;
Index : integer;
Date_Der_Modif_F : TDateTime;
Date_Creation : TDateTime;
Date_Der_Acces : TDateTime;
begin
ITF_Rempir_Tab_Source;
SetLength(Tab_F_Source, Nb_F_Source_Listes_Ds_Tab_F_Source);
For i := 0 TO (Nb_F_Source_Listes_Ds_Tab_F_Source -1) DO
begin
Tab_F_Source[i].Nom_Cplt_F := Lst_F_Ds_Source.Strings[i];
Tab_F_Source[i].Nom_Court_F := ExtractFilePath(Lst_F_Ds_Source.Strings[i]);
Tab_F_Source[i].Surface_F := GetFileSize(Lst_F_Ds_Source.Strings[i]);
GetFileTimes(Tab_F_Source[i].Nom_Cplt_F, Date_Creation, Date_Der_Acces, Date_Der_Modif_F); //DEBUG C'est ici !
// A l'ouverture du F par la fonction.
//J'ai repéré ça en "pas à pas". Et ça ne peut pas venir de la fonction de ce site.
Tab_F_Source[i].Date_Der_Modif := Date_Der_Modif_F;
end;
Date_Der_Modif_F := Tab_F_Source[Index].Date_Der_Modif;
...
end; |
La fonction (d'ici) utilisée pour récupérer la date de la dernière modification du fichier :
( http://delphi.developpez.com/faq/?pa...-un-repertoire )
Code:
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
|
Function GetFileTimes(const FileName: string; var Created: TDateTime; var Accessed: TDateTime; var Modified: TDateTime): Boolean;
var
Handle_F: THandle;
Info1, Info2, Info3: TFileTime;
SysTimeStruct: SYSTEMTIME;
TimeZoneInfo: TTimeZoneInformation;
Bias: Double;
begin
Result := False;
Bias := 0;
Handle_F := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
if Handle_F > 0 then // C'EST ICI : erreur de vérfification d'étendue
begin
try
if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then Bias := TimeZoneInfo.Bias / 1440; // 60x24
GetFileTime(Handle_F, @Info1, @Info2, @Info3);
if FileTimeToSystemTime(Info1, SysTimeStruct) then
Created := SystemTimeToDateTime(SysTimeStruct) - Bias;
if FileTimeToSystemTime(Info2, SysTimeStruct) then
Accessed := SystemTimeToDateTime(SysTimeStruct) - Bias;
if FileTimeToSystemTime(Info3, SysTimeStruct) then
Modified := SystemTimeToDateTime(SysTimeStruct) - Bias;
Result := True;
finally
FileClose(Handle_F);
end;
end;
end; |
Pourquoi cette "erreur de vérification d'étendue " ? Je suppose que ça vient du tableau, mais pourquoi ?
Variables générales :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
Tab_F_Source : array of Infos_F; // Tableau dynamique
Tab_F_Dest : array of Infos_F; // Tableau dynamique
Nb_Rep_Source_Listes_Ds_Tab_Rep_Source : integer;
Nb_F_Source_Listes_Ds_Tab_F_Source : integer;
Nb_Rep_Dest_Listes_Ds_Tab_Rep_Dest : integer;
Nb_F_Dest_Listes_Ds_Tab_F_Dest : integer;
Lst_Rep_Ds_Source : TStringLIst;
Lst_Rep_Ds_Dest : TStringLIst;
Lst_F_Ds_Source : TStringLIst;
Lst_F_Ds_Dest : TStringList;
Rep_Dest_Sauvegarde_Debug : string; |
Résolution : J'ai refait ma structure de données. Ca plantait parce que j'utilisais des string au lieu de tableaux de char