2015-10-28 7 views
5

में प्रतिलिपि फ़ोल्डर, सबफ़ोल्डर और फ़ाइलों की प्रतिलिपि बनाएँ कोड कोड के भीतर किसी निर्देशिका के सभी फ़ाइलों और उप-निर्देशिकाओं को ब्राउज़/पुनरावर्तित करने/स्थानांतरित करने का कोई तरीका है? (PrepareToInstall)इनो सेटअप: कोड अनुभाग

मैं एक विशिष्ट निर्देशिका की अनदेखी करने की जरूरत है, लेकिन xcopy का उपयोग कर इसे उदाहरण के लिए सभी निर्देशिकाओं /default/ पर ध्यान नहीं देता, है, और मैं केवल एक विशिष्ट की अनदेखी करने की जरूरत है।

Files अनुभाग को बाद में आवश्यकतानुसार निष्पादित किया जाता है।

उत्तर

9

रिकर्सिवली प्रोग्राम के रूप में एक निर्देशिका कॉपी करने के लिए उपयोग करें:

procedure DirectoryCopy(SourcePath, DestPath: string); 
var 
    FindRec: TFindRec; 
    SourceFilePath: string; 
    DestFilePath: string; 
begin 
    if FindFirst(SourcePath + '\*', FindRec) then 
    begin 
    try 
     repeat 
     if (FindRec.Name <> '.') and (FindRec.Name <> '..') then 
     begin 
      SourceFilePath := SourcePath + '\' + FindRec.Name; 
      DestFilePath := DestPath + '\' + FindRec.Name; 
      if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then 
      begin 
      if FileCopy(SourceFilePath, DestFilePath, False) then 
      begin 
       Log(Format('Copied %s to %s', [SourceFilePath, DestFilePath])); 
      end 
       else 
      begin 
       Log(Format('Failed to copy %s to %s', [SourceFilePath, DestFilePath])); 
      end; 
      end 
      else 
      begin 
      if DirExists(DestFilePath) or CreateDir(DestFilePath) then 
      begin 
       Log(Format('Created %s', [DestFilePath])); 
       DirectoryCopy(SourceFilePath, DestFilePath); 
      end 
       else 
      begin 
       Log(Format('Failed to create %s', [DestFilePath])); 
      end; 
      end; 
     end; 
     until not FindNext(FindRec); 
    finally 
     FindClose(FindRec); 
    end; 
    end 
    else 
    begin 
    Log(Format('Failed to list %s', [SourcePath])); 
    end; 
end; 

किसी भी छानने की जरूरत जोड़ें। देखें कि . और .. फ़िल्टर किए गए हैं।