2012-04-19 11 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

तो (Rec.Attr और faDirectory) एक नकारात्मक मान देता है यदि वर्तमान TSearchRec तत्व निर्देशिका है? यह – Alexjjsmith

+4

क्यों नहीं है, लाइन '(Rec.Attr और faDirectory)' 'AND' ऑपरेंड का उपयोग यह जांचने के लिए करता है कि प्रविष्टि के attibutes में 'faDirectory' ($ 00000010) मान सेट किया गया है या नहीं। – RRUZ

+0

मैं देखता हूं, बहुत बहुत धन्यवाद। मुझे पता है कि यह मूल सवाल नहीं था कि मुझे तकनीकी रूप से एक नया प्रश्न बनाना चाहिए, लेकिन मैं सोच रहा था कि क्या आपके पास समय है कि आप मुझे सुझाव दे सकते हैं कि मुझे यह दिखाने के लिए एक शोमेज कैसे हो सकता है कि मुझे फाइल नहीं मिली है, मेरे पास है एक बुलियन वैरिएबल डालने का प्रयास किया गया है जहां परिवर्तनीय फ़ाइलफॉउंड को गलत पर सेट किया गया है, लेकिन फ़ाइलफॉउंड: = सही है अगर FindFirst (पथ + फ़ाइल नाम, faAnyFile - faDirectory, Rec) = 0, हालांकि यह एक पुनरावर्ती प्रक्रिया है जो यह काम नहीं करेगा, प्राप्त करने के किसी भी आसान तरीके यह? – Alexjjsmith

संबंधित मुद्दे