das hast du völlig recht.... hab es angepasst und auf "AllFilesMask" gestellt.. jetzt läuft es.
Also suchen alle drei Methoden (Methode Winnie, Methode Fliegermichl, Methode FindAllFilles) nach allen Dateien
Aber trotzdem gibt es da Unterschiede im Ergebnis

- Screenshot 2021-03-12 190241.png (4.23 KiB) 1810 mal betrachtet
Methode Fliegermichl
Code: Alles auswählen
procedure TForm1.CountFiles(path: string; var dirs, files: integer);
var sr : TSearchRec;
i : integer;
begin
i := FindFirst(path + DirectorySeparator + AllFilesMask, faAnyFile, sr);
while (i = 0) do
begin
if (sr.name <> '.') and (sr.Name <> '..') then
begin
if (sr.Attr and faDirectory <> 0) then
begin
inc(dirs);
CountFiles(path + DirectorySeparator + sr.Name, dirs, files);
end else
begin
inc(files);
end;
end;
i := FindNext(sr);
end;
FindClose(sr);
end;
Methode Winni
Code: Alles auswählen
function TForm1.TreeCount(StartDir: String): integer;
var search : TSearchRec;
DirAttr : integer;
begin
{$IFDEF LINUX} DirAttr := 48;
{$ELSE} DirAttr := faDirectory;
{$ENDIF}
result := 0;
if startDir[length(startDir)] <> DirectorySeparator then
startDir := startDir + DirectorySeparator;
if findFirst(startDir + AllFilesMask, faAnyFile, search) = 0 then
begin
repeat
if (search.name = '.') or (search.name = '..') then Continue;
if (search.Attr = DirAttr) then result := result + TreeCount(startDir+search.Name) else
inc (result);
until FindNext(search) <> 0;
end;
findClose(search);
end;
Methode FindAllFiles
Code: Alles auswählen
procedure TForm1.runFindAllFiles;
var
ResultFiles: TStringList;
StartTime, EndTime : QWord;
row:integer;
begin
ResultFiles := TStringList.Create;
try
StartTime := GetTickCount64;
FindAllFiles(ResultFiles, DirectoryEdit1.Text, AllFilesMask, true);
EndTime := GetTickCount64;
row := StringGrid1.RowCount;
StringGrid1.RowCount := row + 1;
StringGrid1.Cells[0,row]:='FindAllFiles';
StringGrid1.Cells[1,row]:=inttostr(ResultFiles.Count);
//StringGrid1.Cells[2,row]:=inttostr(dirs);
StringGrid1.Cells[3,row]:=IntToStr (EndTime-StartTime);
finally
ResultFiles.Free;
end;
end;
Aus meiner Sicht sollten doch alle drei Methode exakt die gleiche Anzahl Files liefern, oder nicht?
Any Ideas ?