即使仅与faDirectory一起使用,FindNext也会返回文件名

时间:2011-12-30 06:52:44

标签: delphi file find delphi-xe

我正在尝试列出给定目录中的所有目录。我有这段代码:

var
    srec: TSearchRec;

begin
    // folder is some absolute path of a folder
    if FindFirst(folder + PathDelim + '*', faDirectory, srec) = 0 then
        try
            repeat
                if (srec.Name <> '.') and (srec.Name <> '..') then
                    ShowMessage(srec.Name);
            until FindNext(srec) <> 0;
        finally
            FindClose(srec);
        end;

但由于某种原因,我只收到有关文件名而不是目录的消息。我认为使用faDirectory会使FindFirst和family只返回目录名。我究竟做错了什么?如果我将其更改为

if FindFirst(folder, faDirectory, srec) = 0 then

然后它只显示folder的名称,但不显示绝对路径(相对于folder + '/..'),然后退出。

我意识到我可以通过确保(srec.Attr and faDirectory) = faDirectory来检查它是否是一个目录,但我觉得这样做是以迂回的方式进行,应该有一个正确的方法。

3 个答案:

答案 0 :(得分:6)

如果您使用的是delphi xe,请检查TDirectory.GetDirectories函数。

SysUtils.FindFirst文档可以解答您的问题。

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;
  

Attr参数指定要包含的特殊文件   到所有普通文件。何时选择这些文件属性常量   指定Attr参数。

答案 1 :(得分:4)

你可以这样做:

var
  Dir: string;
begin
  for Dir in TDirectory.GetDirectories('c:\') do
    ShowMessage(Dir);
end;

答案 2 :(得分:1)

您必须使用过滤器删除文件 对代码进行一些小改动

你的代码: folder + PathDelim + '*' 改为

folder + PathDelim + '*.'