有如下代码:
function MyfileOP(sourcename : string;pToname : string;strOP:string):Integer;
var 
 FData : TShFileOpStruct;
begin
  Fdata.pFrom := Pchar(sourcename);
  if strOP = 'Delete' then
   begin
    Fdata.wFunc := FO_DELETE;
    Fdata.pTo := #0#0;
   end
  else
   begin
    Fdata.wFunc := FO_COPY;
    Fdata.pTo := Pchar(pToname);
   end;
  FData.Wnd := Application.Handle ;
  fData.fFlags :=  FOF_NOCONFIRMATION or FOF_NOCONFIRMMKDIR ;
  result := ShFileOperation( FData );
end;IF MyfileOP('C:\1234\123','D:\123\12','COPY') = 0 THEN
showmessage('copy ok!')
else showmessage ( 'error');老是出错,不知哪位大哥可以提供些例程。另外这些
FOF_NOCONFIRMATION 
怎么的老搞不懂是怎么回事,想看到他复制的进度,但不用它提示其它东西,删除不想放到回收站而直接删。

解决方案 »

  1.   

    删除目录: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;重新命名:
    用MoveFile()或者下面的函数也可以。
    //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;
      

  2.   

    copy 和 delete一个文件呢?同样不用提示,直接覆盖,删除。不用放回收站。
    但要有进度显示。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    DirInfo: TSearchRec;
    r : Integer;
    begin
    r := FindFirst('C:\Test\*.*', FaAnyfile, DirInfo);
    while r = 0 do
    begin
    if ((DirInfo.Attr and FaDirectory<>FaDirectory) and
    (DirInfo.Attr and FaVolumeId<>FaVolumeID)) then
    if DeleteFile(pChar('C:\test\' + DirInfo.Name)) = false then
    ShowMessage('Unable to delete : C:\test\' + DirInfo.Name);
    r := FindNext(DirInfo);
    end;
    SysUtils.FindClose(DirInfo);
    if RemoveDirectory('C:\Test') = false then
    ShowMessage('Unable to delete direcotry : C:\test');
    end;end.
      

  4.   

    行了,多谢。用了一个findfirst,忘了findclose,所以老是说在使用,不让删。
    thanks all!