吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1052|回复: 9
收起左侧

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

[复制链接]
冥界3大法王 发表于 2022-6-14 23:01
[Delphi] 纯文本查看 复制代码
// 函数名称: 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[i]);

免费评分

参与人数 1吾爱币 +1 收起 理由
冥界3大法王 + 1 热心回复!

查看全部评分

zxp922 发表于 2022-6-15 08:39
AFiles.Add(AddPath + FS.Name);
改为AFiles.Add(FS.Name);
得到就是文件名

免费评分

参与人数 1热心值 +1 收起 理由
冥界3大法王 + 1 谢谢@Thanks!

查看全部评分

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

免费评分

参与人数 1吾爱币 +1 收起 理由
冥界3大法王 + 1 用心讨论,共获提升!

查看全部评分

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

@sail2000
不明白,求样例!

@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;

[Delphi] 纯文本查看 复制代码
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', [AllFiles.Count]));
    ShowMessage(AllFiles[0]);
  finally
    AllFiles.Free;
  end;
end; 

免费评分

参与人数 1热心值 +1 收起 理由
冥界3大法王 + 1 谢谢@Thanks!

查看全部评分

 楼主| 冥界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
最后用了这个版本,解决方案实在是多啊。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-12 21:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表