如何获取名称中还包含点的目录的子文件夹名称?

时间:2016-07-02 14:57:27

标签: delphi delphi-xe7

我正在尝试使用目录中的所有文件夹名称填充字符串列表。

以下是我如何能够做到这一点的摘录:

var
  SL: TStringList;
  SearchAttr: LongInt;
  SR: TSearchRec;
begin
  SL := TStringList.Create;
  try
    SearchAttr := (faDirectory);

    if FindFirst(Directory + '\*.', SearchAttr, SR) = 0 then
    begin
      try
        repeat
          if (SR.Attr and faDirectory) <> 0 then
          begin
            if (SR.Name <> '.') and (SR.Name <> '..') then
            begin
              SL.Add(Directory + SR.Name);
            end;
          end;
        until
          FindNext(Sr) <> 0;
        finally
          FindClose(SR);
        end;
      end;
    end;

    // do something with string list folder names      
  finally
    SL.Free;
  end;
end;

我访问的父文件夹包含220个子文件夹,但例程只添加了216个文件夹名称。经过一些比较和调试后,我发现没有添加的4个文件夹名称在名称中包含点。

为了测试我创建了一个名为&#34; Test Folder&#34;的文件夹。在里面我添加了9个名为的新文件夹:

  
      
  • 文件夹1
  •   
  • 文件夹2
  •   
  • 文件夹3
  •   
  • 文件夹4
  •   
  • 文件夹5
  •   
  • 文件夹.6
  •   
  • 文件夹7
  •   
  • F.O.L.D.E.R 8
  •   
  • 文件夹9
  •   

使用&#34;测试文件夹&#34;作为父目录,它只添加以下子文件夹:

  
      
  • 文件夹1
  •   
  • 文件夹2
  •   
  • 文件夹3
  •   
  • 文件夹4
  •   
  • 文件夹5
  •   
  • 文件夹7
  •   
  • 文件夹9
  •   

我一直在试验SR.Name <> '.'SR.Name <> '..'SR.Name[1] <> '.'等,但没有成功。

如何修改代码以允许名称中包含点的文件夹名称并将其添加到我的字符串列表中?

由于

1 个答案:

答案 0 :(得分:6)

将搜索字符串从'*.'更改为'*'

您的搜索字符串仅匹配具有空扩展名的对象。您希望匹配所有对象,无论它们是否具有扩展名。