var
  T: TSHFileOpStruct;
begin
  T.Wnd:=0;
  T.wFunc:=FO_DELETE;
  T.fFlags := Fof_NoConfirmation;
  T.pFrom:=PChar(ShellListView1.selectedfolder.PathName);
  if FileExists(ShellListView1.SelectedFolder.PathName) then
      DeleteFile(ShellListView1.selectedfolder.PathName)
  else
      SHFileOperation(T);
end;上面的代码,删除文件时没问题,删除文件夹时报错,是哪不对?

解决方案 »

  1.   

    把你的
    T.fFlags := Fof_NoConfirmation; 
    这句改为:
    T.fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR+FOF_NOERRORUI;于是,报错消失。不知道你可否结贴?
      

  2.   


    unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ShellApi;type TForm1 = class(TForm) btnCreate: TButton; btnDelete: TButton; procedure btnCreateClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject);private { Private declarations }public { Public declarations }end;var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnCreateClick(Sender: TObject); beginCreateDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’),nil); end; procedure TForm1.btnDeleteClick(Sender: TObject); varT:TSHFileOpStruct;P:String; beginP:=ExtractFilePath(ParamStr(0))+’Test’;with T dobegin Wnd:=0; wFunc:=FO_DELETE; pFrom:=PChar(P); pTo:=nil; fFlags:=FOF_ALLOWUNDO+FOF_NOERRORUI; hNameMappings:=nil; lpszProgressTitle:=’正在删除文件夹’; fAnyOperationsAborted:=False;end;SHFileOperation(T);//RemoveDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’)); end;end.
      

  3.   

    FOF_MULTIDESTFILES 0x0001 //pTo 指定了多个目标文件,而不是单个目录
      FOF_CONFIRMMOUSE 0x0002
      FOF_SILENT 0x00044 // 不显示一个进度对话框
      FOF_RENAMEONCOLLISION 0x0008 // 碰到有抵触的名字时,自动分配前缀
      FOF_NOCONFIRMATION 0x0010 // 不对用户显示提示
      FOF_WANTMAPPINGHANDLE 0x0020 // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放
      FOF_ALLOWUNDO 0x0040 // 允许撤销
      FOF_FILESONLY 0x0080 // 使用 *.* 时, 只对文件操作
      FOF_SIMPLEPROGRESS 0x0100 // 简单进度条,意味者不显示文件名。
      FOF_NOCONFIRMMKDIR 0x0200 // 建新目录时不需要用户确定
      FOF_NOERRORUI 0x0400 // 不显示出错用户界面
      FOF_NOCOPYSECURITYATTRIBS 0x0800 // 不复制 NT 文件的安全属性
      FOF_NORECURSION 0x1000 // 不递归目录
      

  4.   

    ---------------------------
    Saferecyclebin
    ---------------------------
    Access violation at address 7C84A91F in module 'kernel32.dll'. Read of address 000377E3.
    ---------------------------
    确定   
    ---------------------------