Поиск файлов в папке

  • Автор темы destroy
  • Дата начала
D

destroy

#1
Привет всем.

Вообщем имеется код, для поиска файлов в папке и под папках

[codebox]
procedure FindFiles(StartFolder, Mask: string; List: TStrings;
ScanSubFolders: Boolean = True);
var
SearchRec: TSearchRec;
FindResult: Integer;
s2s: integer;
s3s,s_test: string;
s4s: integer;
begin

List.BeginUpdate;

try
StartFolder := IncludeTrailingBackslash(StartFolder);
FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
try
while FindResult = 0 do
with SearchRec do
begin
if (Attr and faDirectory) <> 0 then
begin
if ScanSubFolders and (Name <> '.') and (Name <> '..') then
FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
end
else
begin
if MatchesMask(Name, Mask) then
List.Add(StartFolder + Name);
end;
FindResult := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
finally
List.EndUpdate;
end;
end;

[/codebox]


Подскажите пожалуйста как процедурку модифицировать, чтобы при поиске файлов писалось еще и название папки.
Тоесть идет в начале название папки а потом файлы, которые найдены. Но важный момент. Если в папке нет
файлов - название папки добавлять не надо.

Чтобы добавлялась папка я знаю как сделать. А вот как сделать чтобы папка не добавлялась если в ней не найдено файлов?
 
D
#2
Элементарно: Добавить ExtractFilePath(SearchRec.Name) - это и есть путь к файлу

Чтобы не отображались пустые папки нужно задать маску по расширению if ExtractFileExt(SearchRec.Name)='..' или проверять длинну расширения файла if Length(ExtractFileExt(SearchRec.Name))<2 и если расширение короче 2-х символов то не выполнять вывод (второй способ подходит только в том случае, если вас не интересует поиск файлов без расширения, ведь такие тоже бывают)