冥界3大法王 发表于 2021-9-25 11:49

求教 怎么遍历取到子文件夹名?


uses
SysUtils, StrUtils, Masks;




function MakeFileList(Path, FileExt: string): TStringList;
var
sch: TSearchrec;
begin
Result := TStringlist.Create;
if rightStr(trim(Path), 1) <> '\' then
    Path := trim(Path) + '\'
else
    Path := trim(Path);
if not DirectoryExists(Path) then
begin
    Result.Clear;
    exit;
end;
if FindFirst(Path + '*', faAnyfile, sch) = 0 then
begin
    repeat
      Application.ProcessMessages;
      if ((sch.Name = '.') or (sch.Name = '..')) then
      Continue;
      if DirectoryExists(Path + sch.Name) then
      begin
      Result.AddStrings(MakeFileList(Path + sch.Name, FileExt));
      end
      else
      begin
      if (UpperCase(extractfileext(Path + sch.Name)) = UpperCase(FileExt)) or (FileExt = '.*') then
          Result.Add(Path + sch.Name);
      end;
    until FindNext(sch) <> 0;
    SysUtils.FindClose(sch);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Items := MakeFileList('X:\要遍历的文件夹', '.*');
end;

batcd 发表于 2021-9-25 12:19

你这个语言我不会,但是遍历文件夹用递归是最好的了

风景暗色调 发表于 2021-9-25 12:30

递归调用自身

DEATHTOUCH 发表于 2021-9-25 13:56

用 System.IOUtils 单元
里面有 TDirectory.GetDirectories 可以用
用法:
TDirectory.GetDirectories(path, '*.*', TSearchOption.soAllDirectories);
他会自动递归查找所有文件夹

DEATHTOUCH 发表于 2021-9-25 14:08

本帖最后由 DEATHTOUCH 于 2021-9-25 14:15 编辑

DEATHTOUCH 发表于 2021-9-25 13:56
用 System.IOUtils 单元
里面有 TDirectory.GetDirectories 可以用
用法:

TDirectory里还有查找所有子文件夹内文件的函数GetFiles

Atnil 发表于 2021-9-25 14:52

...用递归函数...这一定是在钓鱼
大法王怎么可能不知道递归
话说这Delphi风格的SmartPascal代码是怎么肥思?

冥界3大法王 发表于 2021-9-25 16:41

DEATHTOUCH 发表于 2021-9-25 13:56
用 System.IOUtils 单元
里面有 TDirectory.GetDirectories 可以用
用法:


感谢 各位找到了这个https://blog.csdn.net/weixin_30747253/article/details/97430839

冥界3大法王 发表于 2021-9-25 17:18

找到我要的答案了:https://www.cnblogs.com/del/archive/2009/10/16/1584768.html
页: [1]
查看完整版本: 求教 怎么遍历取到子文件夹名?