用FindFile 和FindNext 一个一个的得到文件名字,在用CopyFile拷贝。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
        DirInfo: TSearchRec;
        r : Integer;
    begin
        if SaveDialog1.Execute then
           begin
               if CreateDir(SaveDialog1.FileName)= false then
                  ShowMessage('不能创建目录:'+SaveDialog1.FileName);
               r := FindFirst(ExtractFilePath(Application.Exename)+'dbf\*.*', FaAnyfile, DirInfo);
               while r = 0 do
                   begin
                       if ((DirInfo.Attr and FaDirectory <> FaDirectory) and
                            (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
                          CopyFile(pChar(ExtractFilePath(Application.Exename)+'dbf\'+DirInfo.Name),
                                                    pChar(SaveDialog1.FileName+'\'+DirInfo.Name),True);
                       r:=FindNext(DirInfo);
                   end;
               SysUtils.FindClose(DirInfo);
           end;
    end; 
      

  2.   

    删除目录:function DelDirectory(const Source:string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_DELETE;
        pFrom := PChar(source+#0);
        pTo := #0#0;
        fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
    复制目录:
    function CopyDirectory(const Source, Dest: string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_COPY;
        pFrom := PChar(source+ #0 );
        pTo := PChar(Dest+ #0 );
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;重新命名:
    //RenDirectory('d:\wt2','d:\bcde');
    function RenDirectory(const OldName,NewName:string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_RENAME;
        pFrom := PChar(OldName+ #0 );
        pTo := pchar(NewName+ #0 );
        fFlags := FOF_NOCONFIRMATION+FOF_SILENT;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;
    //Copy 多个文件的处理:
    function CopyFiles(const Source,Dest: string): boolean;
    var
      fo: TSHFILEOPSTRUCT;
    begin
      FillChar(fo, SizeOf(fo), 0);
      with fo do
      begin
        Wnd := 0;
        wFunc := FO_COPY;
        pFrom := @source[1];
        pTo :=pchar(dest);
        fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR    ;
      end;
      Result := (SHFileOperation(fo) = 0);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
      i:integer;
    begin
      if opendialog1.Execute then
      begin
        for i:=0 to OpenDialog1.Files.Count-1 do
         str:=str+OpenDialog1.Files.strings[i]+ #0 ;
        showmessage(str);
        str:=str+ #0 ;
        CopyFiles(str, 'd:\temp' );
      end;
    end;
      

  3.   

    { ----------------------------------------------------- }
    {copy整个目录                                           }
    { ----------------------------------------------------- }
    function TMainForm.CopyDir(FromDir, ToDir: string): boolean;
    var T         : TSHFileOpStruct;
    begin
            With T do
            Begin
              //Wnd:=Fm_Create_Question.Handle ;
              Wnd:=Application.Handle;
              wFunc:=FO_COPY ;
              pFrom:=Pchar(FromDir);
              pTo:=pchar(ToDir);
              hNameMappings:=nil;
              lpszProgressTitle:=nil;
              fFlags:=FOF_NOCONFIRMATION;
            End;
            SHFileOperation(T);
            result := true;
    end;