5

ユーザーがパスとサブパスで入力したファイルを検索する手順があります。次の行を除いて、ほとんどのことをよく理解しています。

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
4

1 に答える 1

10

1) faDirectory 属性は、エントリがディレクトリかどうかを示します。

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

2) 各ディレクトリには 2 つのドット ディレクトリ名があり、再帰スキャンではこれを避ける必要があります。

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

つまり、その行は次のことを意味します。現在のエントリがディレクトリであり、Dot Directory.

于 2012-04-19T23:35:04.020 に答える