Código Delphi
// Função Para Copiar Uma Pasta Com Subdiretórios no Delphi.
// Esta Função Copia um Diretório e Seus Subdiretórios Para o Diretório de Destino.
Usamos a Função ShFileOperation, Definida em ShellApi.pas.
Ela Recebe Apenas um Parâmetro, do Tipo TShFileOpStruct, Uma Estrutura Contendo as Informações de Cópia (Na Realidade, Esta Função Permite Também Outras Operações de Arquivos, Como Exclusão ou Movimentação). Basta Preencher a Estrutura e Chamar a Função.
Assim, Poderíamos Criar Uma Função CopiaDirs.
Código
function CopiaDirs(DirFonte,DirDest : String) : Boolean;
var
ShFileOpStruct : TShFileOpStruct;
begin
Result := False;
if DirFonte = '' then
raise Exception.Create('Diretório fonte não pode ficar em branco');
if DirDest = '' then
raise Exception.Create('Diretório destino não pode ficar em branco');
if not DirectoryExists(DirFonte) then
raise Exception.Create('Diretório fonte inexistente');
DirFonte := DirFonte+#0;
DirDest := DirDest+#0;
FillChar(ShFileOpStruct,Sizeof(TShFileOpStruct),0);
with ShFileOpStruct do begin
Wnd := Application.Handle;
wFunc := FO_COPY;
pFrom := PChar(DirFonte);
pTo := PChar(DirDest);
fFlags := FOF_ALLOWUNDO or FOF_SIMPLEPROGRESS or FOF_NOCONFIRMATION;
end;
ShFileOperation(ShFileOpStruct);
end;