因为是新手,所以请教大家.
我想实现如下功能: 点击按钮就可以把程序目录下的db1.mdb文件(执行文件和db1.mdb在赛同一个文件夹下)保存到另外一个地方,用户可以选择保存路径...

解决方案 »

  1.   

    Function Copy_Dir(SourceDir,DestDir:String;nLx:Integer):Boolean;
      Var
        Opstruc: TshFileOpStruct;
        frombuf,tobuf: Array[0..128] of Char;
      begin
        FillChar(frombuf,Sizeof(frombuf),0);
        FillChar(tobuf,Sizeof(tobuf),0);
        StrPcopy(frombuf,SourceDir);
        Case nLx of
             1:
               StrPcopy(tobuf,DestDir);
        end;
        With Opstruc Do
        Begin
             Wnd:=0;
             Case nLx of
                 1: wFunc:=FO_COPY;
                 2: wFunc:=FO_DELETE;
                 Else wFunc:=FO_COPY;
             end;
             pFrom:=@frombuf;
             pTo:=@tobuf;
             fFlags:=FOF_NOCONFIRMATION;
             fAnyOperationsAborted:=False;
             hNameMappings:=Nil;
             lpszProgressTitle:=Nil;
        end;
        try
             ShFileOperation(OpStruc);
             Result:=True;
        except
             Result:=False;
        end;
      end;
      

  2.   

    Copy_Dir('源文件夹路经','目标文件夹路经',1)
      

  3.   

    谢谢hongqi162(失踪的月亮),
    Copy_Dir('源文件夹路经','目标文件夹路经',1)
    其中原文件的路径怎么获得?我的数据库文件和执行文件放在一起,能保证我的这个文件夹放在哪里执行都可以得到原文件路径..
      

  4.   

    用Windows的API函数CopyFile,返回是否成功
      

  5.   

    源文件的路径如果与执行文件相同,可用:
    ExtractFilePath(Application.ExeName)
    得到
      

  6.   

    我昨天在网上看到了一段代码,但是我不知道怎么设置相对路径?怎么能把StrPCopy(FromDir,'C:\Documents and Settings\Administrator\桌面\ssss\db1.mdb');里的路径换成相对路径。高手指点?实在是着急啊
    -------------------------------------------------------------------------------
    procedure TForm1.Button1Click(Sender: TObject);
    var OpStru:TSHFileOpStruct;
        FromDir,ToDir:array[0..128]of char;
    begin
      FillChar(FromDir,Sizeof(FromDir),0);
      StrPCopy(FromDir,'C:\Documents and Settings\Administrator\桌面\ssss\db1.mdb');
      FillChar(ToDir,Sizeof(ToDir),0);
      SaveDialog1.FileName:='目的数据库路径及数据库名';  //可以改名,需saveDialog控件
      SaveDialog1.Filter:='Access(*.mdb)|*.mdb';
      if SaveDialog1.Execute then begin
        SaveDialog1.FileName:=SaveDialog1.FileName+'.mdb';
        strPCopy(ToDir,SaveDialog1.FileName);
        With OpStru do begin
          Wnd:=Handle;
          wFunc:=FO_COPY;
          pFrom:=@FromDir;
          pTo:=@ToDir;
          fFlags:=FOF_FilesOnly; //FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
          fAnyOperationsAborted:=False;
        end;
        try
          ShFileOperation(OpStru);
          Showmessage('数据备份成功!');
        except
          Showmessage('数据备份失败!');
        end;
      end;
    end;
      

  7.   

    问题解决,更改后的代码是这样的。
    ----------------------------------------------------------------------
    var
      Form1: TForm1;implementation
    uses ShellAPI;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var OpStru:TSHFileOpStruct;
        FromDir,ToDir:array[0..128]of char;
    begin
      FillChar(FromDir,Sizeof(FromDir),0);
      StrPCopy(FromDir,ExtractFilePath(Application.ExeName)+'db1.mdb');
      FillChar(ToDir,Sizeof(ToDir),0);
      SaveDialog1.FileName:='目的数据库路径及数据库名';  //可以改名,需saveDialog控件
      SaveDialog1.Filter:='Access(*.mdb)|*.mdb';
      if SaveDialog1.Execute then begin
        SaveDialog1.FileName:=SaveDialog1.FileName+'.mdb';
        strPCopy(ToDir,SaveDialog1.FileName);
        With OpStru do begin
          Wnd:=Handle;
          wFunc:=FO_COPY;
          pFrom:=@FromDir;
          pTo:=@ToDir;
          fFlags:=FOF_FilesOnly; //FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
          fAnyOperationsAborted:=False;
        end;
        try
          ShFileOperation(OpStru);
          Showmessage('数据备份成功!');
        except
          Showmessage('数据备份失败!');
        end;
      end;
    end;
      

  8.   

    TSHFileOpStruct是什么类型 一用就报错.ShFileOperation又是什么命令,帮助里没有
      

  9.   

    uses shellapi;
    就可用TSHFileOpStruct和ShFileOperation了,HELP see MSDN
      

  10.   

    嫌麻烦的话就用个SAVADAILOG控件好了 直接搞定