2011-12-30 74 views
4

我想列出给定目录中的所有目录。我有这样的代码:即使与faDirectory一起使用,FindNext也会返回文件名

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和家庭只返回目录的名称。我究竟做错了什么?如果我将其更改为

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

然后,它只能说明folder名称,但不是绝对路径(相对于folder + '/..'),之后退出。

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

回答

6

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

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

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

attr参数指定要包括除了 所有正常文件的特殊文件。当指定Attr参数的 时,从这些文件属性常量中进行选择。

+0

谢谢,我会用这个。但是有什么想法,我的第一次尝试有什么问题? – 2011-12-30 07:04:57

+0

检查更新的答案 – RRUZ 2011-12-30 07:11:19

+0

啊我看到了,非常感谢。 – 2011-12-30 07:14:16

4

你可以做这样的事情:

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

您必须使用过滤器文件 一些小的修改删除你的代码

代码: folder + PathDelim + '*' 变化

folder + PathDelim + '*.' 
相关问题