2011-12-30 116 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 + '*.' 
相關問題