2012-04-19 186 views
5

我有其搜索用戶在路徑和子路徑進入文件的過程中,我有最的一個很好的瞭解,除了這行:什麼是目錄名'。'和'..'是什麼意思,faDirectory是什麼意思?

if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') 

整個過程如下: ,如果我不確定這段代碼的用途是否確實,它是否會檢查子路徑中的某些內容?

procedure TfrmProject.btnOpenDocumentClick(Sender: TObject); 
begin 
FileSearch('C:\Users\Guest\Documents', edtDocument.Text+'.docx'); 
end; 

procedure TfrmProject.FileSearch(const Pathname, FileName : string); 
var Word : Variant; 
    Rec : TSearchRec; 
    Path : string; 
begin 
Path := IncludeTrailingBackslash(Pathname); 
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 
then repeat Word:=CreateOLEObject('Word.Application'); 
    Word.Visible:=True; 
    Word.Documents.Open(Path + FileName); 
    until FindNext(Rec) <> 0; 
FindClose(Rec); 


if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then 
try 
    repeat 
    if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name<>'.') and (Rec.Name<>'..') then 
    FileSearch(Path + Rec.Name, FileName); 
    until FindNext(Rec) <> 0; 
finally 
FindClose(Rec); 
end; 

end; //procedure FileSearch 

回答

10

1)faDirectory attibute指示該條目是否是目錄。

(Rec.Attr and faDirectory) <> 0 //check if the current TSearchRec element is a directory 

2)每個目錄包含兩個Dot Directory Names,其必須在遞歸掃描來避免。

(Rec.Name<>'.') and (Rec.Name<>'..') //check the name of the entry to avoid scan when is `.` or `..` 

換句話說該行是指:僅在當前條目是一個目錄,並且不是Dot Directory掃描。

+0

so(Rec.Attr和faDirectory)如果當前TSearchRec元素是一個目錄,則返回一個負值?爲什麼這是 – Alexjjsmith 2012-04-19 23:51:38

+4

不,行'(Rec.Attr和faDirectory)'使用'AND'操作數來檢查faDirectory'($ 00000010)值是否在條目的屬性中設置。 – RRUZ 2012-04-19 23:55:51

+0

我明白了,非常感謝。我知道這不是我應該在技術上創建一個新問題的原始問題,但我想知道如果你有時間,是否可以向我建議我怎麼可以有一個showmessage來表明我沒有找到我的文件,我有試圖把變量FileFound設置爲false的布爾變量,但是如果FindFirst(Path + FileName,faAnyFile-faDirectory,Rec)= 0,FileFound:= true,但是這是一個不可用的遞歸過程,任何簡單的實現方法它? – Alexjjsmith 2012-04-20 00:19:13