Witam.
Mam sobie kodzik wyszukujący w danej ścieżce foldery i pliki o konkretnym rozszerzeniu i pokazującym to wszystko w TreeView:
procedure GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode; IncludeFiles: Boolean; Ext: String; HideExt: Boolean);
var
SearchRec: TSearchRec;
Node: TTreeNode;
begin
Tree.Items.BeginUpdate;
if Directory[Length(Directory)] <> '\' then Directory := Directory + '\';
if (FindFirst(Directory + '*.*', faDirectory, SearchRec) = 0) then
begin
repeat
if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] <> '.') then
begin
if (SearchRec.Attr and faDirectory > 0) then
Item := Tree.Items.AddChild(Item, SearchRec.Name);
Node := Item.Parent;
GetDirectories(Tree, Directory + SearchRec.Name, Item, IncludeFiles, Ext, HideExt);
Item := Node;
end
else if IncludeFiles then
if (Ext = '') or (Ext = '*') and (FindFirst(Directory + '*.' + Ext , faAnyFile, SearchRec) = 0) then
begin
if (SearchRec.Name[1] <> '.') then
if HideExt = True then
ExtractFileName(SearchRec.Name);
Tree.Items.AddChild(Item, SearchRec.Name);
end
else
begin
if (ExtractFileExt(SearchRec.Name)= '.' + Ext) and (FindFirst(Directory + '*.' + Ext , faAnyFile, SearchRec) = 0) then
begin
repeat
if HideExt = True then
ExtractFileName(SearchRec.Name);
Tree.Items.AddChild(Item, SearchRec.Name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
until (FindNext(SearchRec) <> 0) ;
FindClose(SearchRec);
end;
Tree.Items.EndUpdate;
end;
Może nie jest najlepszy, ale działa on m.in. tak, że jeżeli się poda rozszerzenie to jeżeli w folderze jest plik o tym rozszerzeniu i folder (niekoniecznie pusty) nie mający w sobie takiego pliku to folder niemający tego pliku niezostanie on wyświetlony. I jest OK.
Problem polega na tym, że jeżeli jest kilka folderów (folder w folderze) i w żadnym z nich nie ma takiego pliku to i tak zostają te foldery wyświetlone.
Jak zmodyfikować ten kod (a może ktoś ma pomysł na inny), by ścieżka, której nie ma plików o konkretnym rozszerzeniu nie wyświetlała się w TreeView.