冥界3大法王 发表于 2022-6-14 23:01

如何在 ShowMesage 中(调用得到的文件名) ?

// 函数名称: FindAllFiles
// 功能描述: 找指定目录下的所有文件
// 参    数:APath    : 路径名称
//            APropty: 属性名称(*.* | *.txt)
//            AFiles   : 文件列表
//            IsAddPath: 是否增加路径
procedure FindAllFiles(const APath: string; AFiles: TStrings;
const APropty: String = '*.*'; IsAddPath: Boolean = False);
var
FS: TSearchRec;
FPath: String;
AddPath: string;
begin
FPath := IncludeTrailingPathDelimiter(APath);
AddPath := IfThen(IsAddPath, FPath, '');
if FindFirst(FPath + APropty, faAnyFile, FS) = 0 then
begin
    repeat
    if (FS.Name <> '.') and (FS.Name <> '..') then
      if ((FS.Attr and faDirectory) = faDirectory) then
      FindAllFiles(FPath + FS.Name, AFiles, APropty, IsAddPath)
      else
      AFiles.Add(AddPath + FS.Name);
    until FindNext(FS) <> 0;
    SysUtils.FindClose(FS);
end;
end;

lies2014 发表于 2022-6-15 01:12

ShowMessage(AFiles);

zxp922 发表于 2022-6-15 08:39

AFiles.Add(AddPath + FS.Name);
改为AFiles.Add(FS.Name);
得到就是文件名

motto 发表于 2022-6-15 09:04

看着感觉很高深,看来我基础还是没打好

sail2000 发表于 2022-6-15 09:23

其实我是建议抛弃这些旧查找文件方法的,
1,用 MFT 查找文件最快;
2,用 OmniThreadLibrary,用 pipeline 查找文件。

冥界3大法王 发表于 2022-6-15 10:55

sail2000 发表于 2022-6-15 09:23
其实我是建议抛弃这些旧查找文件方法的,
1,用 MFT 查找文件最快;
2,用 OmniThreadLibrary,用 pipeli ...

@sail2000
不明白,求样例! {:301_974:}

@lies2014
为啥我在Delphi 11.1上   【 IfThen】这句报错呢? 没见过这语句

sail2000 发表于 2022-6-15 13:39

冥界3大法王 发表于 2022-6-15 10:55
@sail2000
不明白,求样例!



OmniThreadLibrary官方有例子:
https://github.com/gabr42/OmniThreadLibrary/tree/master/examples/folder%20scanner

lies2014 发表于 2022-6-15 16:41

冥界3大法王 发表于 2022-6-15 10:55
@sail2000
不明白,求样例!



IfThen是个函数,在StrUtils单元中,uses中要加上

lies2014 发表于 2022-6-15 17:27

其实FileUtil就有现成的FindAllFiles过程,直接用就可以

procedure FindAllFiles(AList: TStrings; const SearchPath: String;
const SearchMask: String = ''; SearchSubDirs: Boolean = True; DirAttr: Word = faDirectory;
MaskSeparator: char = ';'; PathSeparator: char = ';'); overload;

procedure TForm1.Button1Click(Sender: TObject);
var
AllFiles: TStringList;
APath: String;
begin
AllFiles := TStringList.Create;
APath := Edit1.Text;
try
    FindAllFiles(AllFiles, APath, '*.*', false);
    ShowMessage(Format('Found %d files', ));
    ShowMessage(AllFiles);
finally
    AllFiles.Free;
end;
end;

冥界3大法王 发表于 2022-6-15 20:06

lies2014 发表于 2022-6-15 17:27
其实FileUtil就有现成的FindAllFiles过程,直接用就可以

procedure FindAllFiles(AList: TStrings; cons ...

@lies2014
http://www.delphitop.com/html/wenjian/4488.html
最后用了这个版本,解决方案实在是多啊。
页: [1]
查看完整版本: 如何在 ShowMesage 中(调用得到的文件名) ?