刚找到一点资料,希望能解决你的问题!
How to Copy A Directory?
In Win32 there is an API function for that: SHFileOperation.
copy a whole directory tree
procedure TForm1.Button2Click(Sender: TObject);
var
  OpStruc: TSHFileOpStruct;
  frombuf, tobuf: Array [0..128] of Char;
Begin
  FillChar( frombuf, Sizeof(frombuf), 0 );
  FillChar( tobuf, Sizeof(tobuf), 0 );
  StrPCopy( frombuf, 'd:\brief\*.*' );
  StrPCopy( tobuf, 'd:\temp\brief' );
  With OpStruc DO Begin
    Wnd:= Handle;
    wFunc:= FO_COPY;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted:= False;
    hNameMappings:= Nil;
    lpszProgressTitle:= Nil;
  end;
  ShFileOperation( OpStruc );
end;

解决方案 »

  1.   

    这里给出一段遍历的代码
    取得了所有文件名后,就可以拷贝了吧不过建议还是用sh系列函数好:)laza(秋高蓝) (2001-1-6 15:32:00)  得10分 
    这是我平时写的一个递归函数,检索某路径下的所有文件包括所有的子文件夹的文件,文件被保存到文件中。
    form1中有edit1写入路径。listbox显示文件。
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, FileCtrl, ComCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Label1: TLabel;
        Edit1: TEdit;
        Button1: TButton;
        ListBox1: TListBox;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Edit1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        FNewPath: string;
        procedure DoSearchPathFile(qPath: string);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    begin
      ListBox1.Items.Clear;
      DoSearchPathFile(Edit1.Text);end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Close;
    end;procedure TForm1.DoSearchPathFile(qPath: string);
    var
      SR: TSearchRec;
      FileAttr: Integer;
    begin
      FileAttr := faDirectory;
      FindFirst(qPath  + '\*.*', FileAttr, SR);  While FindNext(SR) = 0 do
      begin
        if (SR.Name <> '.') and (SR.Name <> '..') then begin
          if DirectoryExists(qPath + '\' + SR.Name) then
          begin
            ListBox1.Items.Add('路径'+ qPath + '\' + SR.Name);
            DoSearchPathFile(qPath + '\' + SR.Name);      end;
          //;else ListBox1.Items.Add(qPath + '\' + SR.Name);    end;
      end;  FileAttr := faAnyFile;  FindFirst(qPath + '\*.*', FileAttr, SR);
      while FindNext(SR) = 0 do
      begin
        if (SR.Name <> '.') and (Sr.Name <> '..') then
        begin
          if not(DirectoryExists(qPath + '\' + SR.Name)) then
            ListBox1.Items.Add(qPath + '\' + SR.Name);
        end;
      end;
    end;procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin  if key = vk_Return then
      begin
        if Trim(Edit1.Text) = '' then
        begin
          ShowMessage('Invalid PathName');
          Exit;
        end;    FNewPath := Edit1.Text[Length(Edit1.Text)];
        if FNewPath = '\' then
          FNewPath := Copy(Edit1.Text, 1, Length(Edit1.Text) - 1)
        else
        begin
          FNewPath := Edit1.Text;
        end;    ListBox1.Clear;
        DoSearchPathFile(FNewPath);  end;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      self.ListBox1.Items.SaveToFile('FileList.txt');
    end;end.