Bonsoir à toutes et à tous,
J'ai un dossier avec des fichiers qui ont été modifiés et j'aimerai les classer par la date de modification.
J'ai essayé avec cette procédure mais cela fonctionne une fois sur deux :
Utilisation :
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 {Liste (avec ou sans chemin complet) les fichiers d'un répertoire filtrés par leur extension, ou tous les fichiers si aucune extension passée à la procedure. SortFlag = 0 => Liste triée par ordre alphabétique SortFlag = 1 => Liste triée par date de modification SortFlag = 2 => Liste triée par date de création} {Ajouter un Tbutton, un Tlistbox et un Tedit} PROCEDURE FindFiles(Path: String; var ExtList, FilesList: TStringList; Const SortFlag : Integer = 0; Const FullPathName : Boolean = false); VAR FileInfo : TSearchRec; i : Integer; S : string; DateFormat : string; function IsWanted(FileName : String): Boolean; var i : Integer; begin result := false; if (FileName='.') or (FileName='..') then exit; if ExtList.Count=0 then begin result := true; Exit; end; for i := 0 to ExtList.Count-1 do begin if AnsiUpperCase(ExtractFileExt(FileName))=AnsiUpperCase(ExtList[i]) then begin result := true; Break; end; end; end; function FileTimeToString(FileTime : TFileTime): String; var SysTime : TSystemTime; LocalTime : TFileTime; begin result := '-------------------'; if FileTimeToLocalFileTime( FileTime, LocalTime ) then begin if FileTimeToSystemTime( LocalTime, SysTime ) then begin result := DateTimeToStr(SystemTimeToDateTime(SysTime)); end; end; end; BEGIN Path := IncludeTrailingPathDelimiter(Path); if not DirectoryExists(Path) then Exit; DateFormat := ShortDateFormat; ShortDateFormat := 'yyyy/MM/dd'; if FindFirst(Path+'*', faAnyFile, FileInfo)=0 then begin repeat if IsWanted(FileInfo.Name) then case SortFlag of 0 : begin if FullPathName then FilesList.Add(Path + FileInfo.Name) else FilesList.Add(FileInfo.Name); end; 1 : begin if FullPathName then FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + Path + FileInfo.Name) else FilesList.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)) + FileInfo.Name); end; 2 : begin if FullPathName then FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + Path + FileInfo.Name) else FilesList.Add(FileTimeToString(FileInfo.FindData.ftCreationTime) + FileInfo.Name); end; end; Until FindNext(FileInfo)<>0; end; ShortDateFormat := DateFormat;//On rétablit le ShortDateFormat. if SortFlag <> 0 then begin FilesList.Sort; for i := 0 to FilesList.Count-1 do begin S := FilesList[i]; Delete(S,1,19);//On élimine les dates. FilesList[i] := S; end; end; FindClose(FileInfo); END;
Merci, je pense qu'il existe une solution.
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 procedure TForm1.Button1Click(Sender: TObject); var ExtList : TStringList; FilesList : TStringList; begin ExtList := TStringList.Create; FilesList := TStringList.Create; try ExtList.Add('.jpg'); ExtList.Add('.bmp'); FindFiles(Edit1.Text, ExtList, FilesList, 1, true); ListBox1.Items.Assign(FilesList); finally FilesList.Free; ExtList.Free ; end; end;
@+
cincap
Partager