function TFormMain.CopyDirectory(PCopy:string;PUpdate:string)
var
  SHFOS1:TSHFileOpStruct;
begin
  with SHFOS1 do
  begin
    Wnd := Handle;
    WFunc := FO_COPY;
    pFrom := 'e:\testdata';
    pTo := 'e:\backup';
    fFlags := FOF_NOCONFIRMMKDIR or FOF_RENAMEONCOLLISION;
    fAnyOperationsAborted := False;
  end;
  if SHFileOperation(SHFOS1) <> 0 then
  begin
    ShowMessage('复制目录e:\testdata失败!');
    exit;
  end;
end;
以上是我复制目录的代码,但是总是无方读取源文件.怎么解决这个问题?
求救中

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ShellApi;type
      TForm1 = class(TForm)
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
        function copydirectroy(ps:string;pc:string):integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function TForm1.copydirectroy(ps:string;pc:string):integer;
    var
      T:TSHFileOpStruct;
    begin
      T.Wnd:= handle;
      T.wFunc:=FO_COPY;
    // T.pFrom:='e:\testdata';(直接赋值能够成功复制目录)
    // T.pTo:= 'e:\backup';
     T.pFrom:=PChar(ps);(使用PChar转换类型后就报错:不能读取源文件和磁盘)
      T.pTo:= PChar(pc);
      T.fFlags := FOF_NOCONFIRMMKDIR or FOF_RENAMEONCOLLISION;
      T.fAnyOperationsAborted:= False;
      T.hNameMappings:=nil;
      T.lpszProgressTitle:=nil;
      if SHFileOperation(T) = 0 then
      showmessage('ok');
    end;
    procedure TForm1.FormShow(Sender: TObject);
    var
      ps,pc:string;
    begin
      ps :='e:\testdata';
      pc := 'e:\backup';
      copydirectroy(ps,pc);
    end;end.
    问题处在使用PChar转换类型后会报错,为什么啊?
      

  2.   

    ps:=ps+#0;
    pc:=pc+#0;
    刚测试过。