Recherche fichier par la date de création (date modifiée) avec le format dans un Tedit !
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 :
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 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; |
Utilisation :
Code:
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; |
Merci, je pense qu'il existe une solution.
@+
cincap