Entweder hast du meinen Beitrag #16 total ignoriert oder ich sehe net wo das Problem liegt
Du musst einfach wenn es im Result um einen Ordner handelt in diesen Ordner reingehen und dort weitersuchen bis es keine weiteren Unterordner mehr gibt.
Hab dir hier mal ein kleines Beispiel was du mit etwas anpassen verwenden kannst (hab ich aus einem aktuellen Projekt rauskopiert) oder aber auch einfach umschreiben kannst um Delphi's TSearchRec zu nutzen!
Delphi-Quellcode:
procedure SearchFiles(aRoot: String; var Files : TStringList; Mask: String = '*.*'; Recursive : Boolean = False);
var
wfd : TWin32FindData;
hFile : THandle;
begin
aRoot := IncludeTrailingPathDelimiter(aRoot);
if Recursive then
begin
hFile := FindFirstFile(PChar(aRoot + Mask), wfd);
if ( hFile <> INVALID_HANDLE_VALUE ) then
try
repeat
if ( wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY ) then
begin
if ( (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') ) then
begin
SearchFiles(aRoot + wfd.cFileName, Files, Mask, Recursive); // hier wird die Rekursion angewandt
end;
end;
until FindNextFile(hFile, wfd) = False;
finally
Windows.FindClose(hFile);
end;
end;
hFile := FindFirstFile(PChar(aRoot + Mask), wfd);
if ( hFile <> INVALID_HANDLE_VALUE ) then
try
repeat
if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY ) then
begin
Files.Add(wfd.cFileName);
end;
until FindNextFile(hFile, wfd) = False;
finally
Windows.FindClose(hFile);
end;
end;
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)