Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What do directory names '.' and '..' mean and what does faDirectory mean?

I have got a procedure which searches for a file entered by the user in a path and subpaths, i have a good understanding of the most of it except for this line:

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

The whole procedure is as follows, help would be appreciated as im not sure exactly of the purpose of this line of code, is it checking something in the subpath?.

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
like image 912
Jeowkes Avatar asked Apr 19 '12 23:04

Jeowkes


1 Answers

1) The faDirectory attibute indicates whether the entry is a directory.

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

2) Each directory has two Dot Directory Names, which must be avoided in the recursive scan.

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

In other words that line means: only scan if the current entry is a directory and is not a Dot Directory.

like image 188
RRUZ Avatar answered Oct 08 '22 07:10

RRUZ