遍历文件夹时,怎么判断是子文件夹,还是文件?
@DEATHTOUCHuses 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;
要是子文件夹,那就动态生成菜单时变成菜单项。
若是文件,则成为单击菜单项时读取打开的文件内容 System.SysUtils.DirectoryExists
System.SysUtils.FileExists
本帖最后由 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 高手在民间 好像有专门的方法吧 WIN32_FIND_DATA findData;
...
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
页:
[1]