中易网

delphi 获取根目录下的文件名及子目录下的文件名

答案:2  悬赏:50  
解决时间 2021-02-12 23:32
delphi 获取根目录下的文件名及子目录下的文件名
最佳答案
给一个通用过程,直接调用,运行看是不是你想要的效果。
procedure GetChildFileList(AStrings: TStrings; ASourFile,
    FileName: string); // 查找子目录
 // AStrings存放路径, ASourceFile要查找的目录,FileName搜索的文件类型 若指定类型,则'*.jpg'or '*.png'
var
  sour_path, sour_file: string;
  TmpList: TStringList;
  FileRec, subFileRec: TSearchrec;
  i: Integer;
begin
    if copy(ASourFile, Length(ASourFile), 1) <> '\' then
    sour_path := IncludeTrailingPathDelimiter(Trim(ASourFile))      // 在路径后面加上反斜杠
  else
    sour_path := trim(ASourFile);
    sour_file := FileName;

  if not DirectoryExists(sour_path) then
  begin
    AStrings.Clear;
    exit;
    end;
  TmpList := TStringList.Create;
  TmpList.Clear;

  if FindFirst(sour_path + '*.*', faAnyfile, FileRec) = 0 then
    repeat
    if ((FileRec.Attr and faDirectory) <> 0) then
    begin
      if ((FileRec.Name <> '.') and (FileRec.Name <> '..')) then
      GetChildFileList(AStrings, sour_path + FileRec.Name + '\', sour_file);
    end;
  until FindNext(FileRec) <> 0;
  FindClose(FileRec);

  if FindFirst(sour_path + FileName, faAnyfile, subFileRec) = 0 then
  repeat
    if ((subFileRec.Attr and faDirectory) = 0) then
    TmpList.Add(sour_path + subFileRec.Name);
  until FindNext(subFileRec) <> 0;
    FindClose(subFileRec);

  for i := 0 to TmpList.Count - 1 do
    AStrings.Add(TmpList.Strings[i]);
    TmpList.Free;
end;

调用:
procedure TForm2.SpeedButton5Click(Sender: TObject);
begin
    GetChildFileList(ListBox1.Items, 'D:\Wyp\', '*.jpg');  // 目录自己定  
    GetChildFileList(ListBox1.Items, 'D:\Wyp\', '*.png');    
end;这里是将查找的目录存放在ListBox里的。

在加载List时,由于Item太多,所以有一定的延时,而不是卡死。
希望能帮到你。
全部回答
findfirst,findnext,findclose.... 搜索个例子给你: procedure searchfileex(const dir, ext: string; files: tstrings); var found: tsearchrec; i: integer; dirs: tstrings; finished: integer; stopsearch: boolean; begin stopsearch := false; dirs := tstringlist.create; finished := findfirst(dir + '*.*', 63, found); while (finished = 0) and not (stopsearch) do begin if (found.name &lt;&gt; '.') then begin if (found.attr and fadirectory) = fadirectory then dirs.add(dir + found.name) else if pos(uppercase(ext), uppercase(found.name)) &gt; 0 then files.add(dir + found.name); end; finished := findnext(found); end; findclose(found); if not stopsearch then for i := 0 to dirs.count - 1 do searchfileex(dirs[i], ext, files); dirs.free; end; 3 procedure findsubdir(dirname: string; filestring: tstrings); var searchrec: tsearchrec; begin //找出所有下级子目录。 if (findfirst(dirname + '*.*', fadirectory, searchrec) = 0) then begin if isvaliddir(searchrec) then filestring.add(dirname + searchrec.name); while (findnext(searchrec) = 0) do begin if isvaliddir(searchrec) then filestring.add(dirname + searchrec.name); end; end; findclose(searchrec); end; function isvaliddir(searchrec: tsearchrec): boolean; begin if (searchrec.attr = 16) and (searchrec.name &lt;&gt; '.') and (searchrec.name &lt;&gt; '..') then result := true else result := false; end;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
盛阳路这个地址在什么地方,我要处理点事
c罗究竟有多壕,他到底多有钱
王派电动车在哪里啊,我有事要去这个地方
知识冲冲冲62题猜成语
是先平整进行土方,还是先进行桩基施工
磷肥和钾肥的区别是什么啊
是身体支配着思想,还是思想支配着身体?
奥薇纳在什么地方啊,我要过去处理事情
宋代的送别诗有哪些
如何拓展美术课程资源
高分子材料与工程学数学吗
经常被人吓到是什么原因
启航客栈地址有知道的么?有点事想过去
iOS11刺激战场麦克风权限在哪
寻找前世之旅中小隐最后跟谁在一起了?
推荐资讯
怎么才能驱除困意?
我在一家公司上班后没拿工资有快两个月了,走
我暗恋我们单位的一名女生,通过通讯录用微信
安兴金霸电器在哪里啊,我有事要去这个地方
用什么播放器播放 bittorrent 格式的啊?
炫舞怎样再一次对局中心动值能达到1314520
新华人寿保险股份有限公司洋县支公司这个地址
缠,换偏旁,并组词
有极速贷款的app吗?
怎么打化学元素式?
我想做一个表格,其他人只能填这个表格中一步
老人觉得腿脚酸软无力是怎么回事
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?