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

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 来检查它是否是一个目录,但我觉得这是一种迂回的方式,应该有一种正确的方式来做。

最佳答案

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

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

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

10-05 21:47