【问题标题】:How to get sub folder names of a directory that also contain dots in the name?如何获取名称中也包含点的目录的子文件夹名称?
【发布时间】:2016-07-02 14:57:26
【问题描述】:

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

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

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 个文件夹名称中包含点。

为了测试,我创建了一个名为“Test Folder”的文件夹,并在其中添加了 9 个新文件夹,名为:

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

使用“测试文件夹”作为父目录时,只添加以下子文件夹:

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

我一直在尝试SR.Name &lt;&gt; '.'SR.Name &lt;&gt; '..'SR.Name[1] &lt;&gt; '.' 等,但没有成功。

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

谢谢

【问题讨论】:

  • 感谢神秘的不赞成票,如果您觉得需要反对票,请至少给出一个理由。
  • 我不明白反对意见。这是一个写得很好的问题,符合所有要求。
  • @KenWhite 谢谢,幸运的是我并不太关心我得到多少赞成或反对,我使用这个网站的主要目的是学习和成长为一名开发人员,并在可能的情况下帮助他人。当神秘用户自己对其他用户的问题投反对票时,我觉得这很烦人,甚至没有留下任何理由或任何建设性的东西。如果用户的问题不好,那么投票者至少应该给出一个合理的理由说明原因,并至少为该人提供一个编辑问题等的机会,而不是让他们思考他们做错了什么。

标签: delphi delphi-xe7


【解决方案1】:

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

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

【讨论】:

  • 感谢您发现错误,我不敢相信我错过了那个,现在我觉得自己真的很愚蠢 - 我会把它当作糟糕的一天继续前进;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
相关资源
最近更新 更多