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

遍历文件夹时,怎么判断是子文件夹,还是文件?

@DEATHTOUCH

uses IOUtils, Types;

const path = 'C:\P7';
//获取指定目录及嵌套目录下的所有文件与子目录
procedure TForm1.Button3Click(Sender: TObject);
var
dfs: TStringDynArray;
str: string;
begin
dfs := TDirectory.GetFileSystemEntries(path', TSearchOption.soAllDirectories, nil);
Memo1.Clear;
for str in dfs do Memo1.Lines.Add(str);
end;

要是子文件夹,那就动态生成菜单时变成菜单项。
若是文件,则成为单击菜单项时读取打开的文件内容

似风而逝 发表于 2021-9-25 17:43

System.SysUtils.DirectoryExists

System.SysUtils.FileExists

DEATHTOUCH 发表于 2021-9-25 18:26

本帖最后由 DEATHTOUCH 于 2021-9-25 18:41 编辑

加一个 filter 函数,在里面做一些事情就行了
procedure TForm1.Button1Click(Sender: TObject);
var
dfs: tarray<string>;
filter: tdirectory.TFilterPredicate;
begin
filter := function(const path: string; const SearchRec: TSearchRec): Boolean
    begin
      if SearchRec.Attr = faDirectory then
      begin
      // 如果是文件夹的操作
      end else begin
      // 不是文件夹的操作,其中 完整文件名 = path+'\'+SearchRec.Name;
      end;
      Result := True; // 设置为 false 就不添加到数组里
    end;
dfs := tdirectory.GetFileSystemEntries(path, TSearchOption.soAllDirectories, filter);
end;

或者在数组里遍历,用前面说的 DirectoryExists 和 FileExists

iyeoman 发表于 2021-9-25 21:04

高手在民间

liuxia 发表于 2021-9-26 08:21

好像有专门的方法吧

yulinsoft 发表于 2021-9-26 09:06

c03xp 发表于 2021-9-26 09:25

WIN32_FIND_DATA findData;

...

if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
页: [1]
查看完整版本: 遍历文件夹时,怎么判断是子文件夹,还是文件?