我正在尝试列出给定目录中的所有目录。我有这段代码:
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
来检查它是否是一个目录,但我觉得这样做是以迂回的方式进行,应该有一个正确的方法。
答案 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 + '*.'