2012-04-19 21 views
5

ich ein Verfahren erhalten haben, die für eine Datei durch den Benutzer in einem Pfad und Subpfade eingegeben sucht, habe ich ein gutes Verständnis für die meisten davon mit Ausnahme von dieser Linie:Was bedeuten Verzeichnisnamen?. und '..' bedeuten und was bedeutet faDirectory?

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

Das gesamte Verfahren ist wie folgt: , help würde geschätzt werden, da ich nicht genau den Zweck dieser Linie des Codes bin, ist es etwas im Unterpfad überprüfend ?.

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 

Antwort

10

1) Die faDirectory attibute zeigt an, ob der Eintrag ein Verzeichnis ist.

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

2) Jedes Verzeichnis hat zwei Dot Directory Names, die in der rekursiven Scan vermieden werden muss.

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

Mit anderen Worten, der Linie bedeutet: nur scannen, wenn der aktuelle Eintrag ein Verzeichnis ist und keine Dot Directory.

+0

also (Rec.Attr und faDirectory) gibt einen negativen Wert zurück, wenn es das aktuelle TSearchRec-Element ein Verzeichnis ist? Warum ist das – Alexjjsmith

+4

Nein, die Zeile '(Rec.Attr und faDirectory)' verwendet den 'AND' Operanden, um zu überprüfen, ob der' faDirectory' ($ 00000010) Wert in den Eigenschaften des Eintrags gesetzt ist. – RRUZ

+0

ich sehe, vielen Dank. Ich weiß, dass dies nicht die ursprüngliche Frage war, ich sollte technisch eine neue Frage erstellen, aber ich fragte mich, ob Sie die Zeit haben, ob Sie mir vorschlagen könnten, wie ich eine showmessage haben könnte, um anzuzeigen, dass ich Datei nicht gefunden wurde, habe ich versuchte, eine boolesche Variable zu setzen, wobei die Variable FileFound auf false gesetzt ist, aber FileFound: = true, wenn FindFirst (Pfad + Dateiname, faAnyFile - faDirectory, Rec) = 0, aber eine rekursive Prozedur ist, die keine einfachen Methoden zum erreichen hat es? – Alexjjsmith

Verwandte Themen