To recursively copy a directory, programmatically use:
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;
Add the necessary filtering. See how they are filtered . and ..
For an example of use, see my answers to questions:
source share