删除文件夹为何报错?

ynduanlian 2009-12-11 05:24:43
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;

上面的代码,删除文件时没问题,删除文件夹时报错,是哪不对?
...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
贝隆 2009-12-11
  • 打赏
  • 举报
回复
学习
ynduanlian 2009-12-11
  • 打赏
  • 举报
回复
---------------------------
Saferecyclebin
---------------------------
Access violation at address 7C84A91F in module 'kernel32.dll'. Read of address 000377E3.
---------------------------
确定
---------------------------
ynduanlian 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mwy654321 的回复:]
把你的
T.fFlags := Fof_NoConfirmation;
这句改为:
T.fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR+FOF_NOERRORUI;

于是,报错消失。不知道你可否结贴?
[/Quote]
怎么我按你的这个,还是报错了?
gyk120 2009-12-11
  • 打赏
  • 举报
回复
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 // 不递归目录
hjkto 2009-12-11
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses

Windows, 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);

 begin

CreateDirectory(PChar(ExtractFilePath(ParamStr(0))+’Test’),nil);

 end;

 procedure TForm1.btnDeleteClick(Sender: TObject);

 var

T:TSHFileOpStruct;

P:String;

 begin

P:=ExtractFilePath(ParamStr(0))+’Test’;

with T do

begin

 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.
无条件为你 2009-12-11
  • 打赏
  • 举报
回复
把你的
T.fFlags := Fof_NoConfirmation;
这句改为:
T.fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR+FOF_NOERRORUI;

于是,报错消失。不知道你可否结贴?

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧