如何把文件删除到回收站中?(80分)

  • 主题发起人 主题发起人 iijj
  • 开始时间 开始时间
I

iijj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把文件删除到回收站中?下面的代码报告

错误(uses中已经添加了shellapi):
procedure TForm1.Button1Click(Sender: TObject);
var
T: TSHFileOpStruct;
P: string;
begin
P := 'C:/Windows/System/EL_CONTROL.CPL';
with T do
begin
Wnd:= 1;
wFunc := FO_DELETE;
pFrom := Pchar(P);
fFlags := FOF_ALLOWUNDO
end;
SHFileOperation(T);
end;

错误信息如下:(在资源管理器中运行时)
“Access violation at address 77EAF8C& in
module 'kernel32.dll'.Read of address
01350012”
按下确定按钮,程序继续执行。
(在编程调试运行时)
“Project Del_undo.exe raised exception
class EAccessViolation with message
'在资源管理器中运行时错误信息'.Process
stopped.Use Step or Run to continue.”
按下确定按钮后,按两次F8,出现‘在资源管理
器中运行时错误信息’。
按下确定按钮,程序继续执行。
请高手指点。
====================

=====

顺便说一下,前两次的问题解答我已看到了,
谢谢美国提子,dgbsnake,dcsdcs,wjiachun,
RedBeret,CJF,六位。
顺便把我的验证结果写在这儿,
窗体Resize事件的激发:
Form1.WindowState改变,Form1的边框被
拖动,均可以激发:
执行外部程序的解决方案:
uses ShellAPI;
ShellExecute(GetDesktopWindow, 'open', '调用的程序

路径', nil, nil, 0);
还是有点问题,但是可以调用如calc等等的程

序。
下面的代码可以解决在win2000advancedServer中

调用ie的问题。
供大家参考,欢迎指正:
ShellExecute(GetDesktopWindow,nil,'IEXPLORE.EXE',
nil,'C:/Program Files/Internet Explorer',SW_SHOW);
====================

======
Problem is Over.
 
program del;

uses ShellApi;
{ 利用ShellApi中: function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall; }

Var T:TSHFileOpStruct;
P:String;
begin
P:='C:/Windows/System/EL_CONTROL.CPL';
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
fFlags:=FOF_ALLOWUNDO
End;
SHFileOperation(T);
End.
 
老问题了,看帮助仔细一点儿!pFrom和pTo都需要#0#0(双0字符)表示结束!把
pFrom=pchr(p)改为pFrom=pchar(p+#0)即可。
 
两位啊,还是不行。
我把所有的可能都试过了,
//pFrom=pchr(p)改为pFrom=pchar(p+#0)
//pFrom=pchr(p)改为pFrom=pchar(p+#0+#10)
都是不行的啊,
 
哎,给出代码把:
procedure TForm1.Button1Click(Sender: TObject);
Var T:TSHFileOpStruct;
P:String;
begin
P:='C:/test.dat';
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pTo:=#0#0;
pFrom:=Pchar(P+#0);
fFlags:=FOF_ALLOWUNDO;
End;
SHFileOperation(T);
end;
 
电脑中翻出来的,不知道对不对。

可以使用 SHFileOperation(), 值得注意的是档名 list 中是以 #0 分隔, 最後一个项目必须以双 #0 字元结束, 以下分别是删除整个目录(含字目录)
与档案的用法示例:

// Test for delete a folder and move files into Recycle Bin
// Change the APath variable as you need.
// uses ..., ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
APath : AnsiString;
lpFileOp: TSHFileOpStruct;
begin
APath := 'D:/temp/test123'#0#0; // must end with double-#0
with lpFileOp do
begin
Wnd := Self.Handle;
wFunc := FO_DELETE;
pFrom := pchar(APath);
pTo := nil;
fFlags := FOF_ALLOWUNDO;
hNameMappings := nil;
lpszProgressTitle := nil;
fAnyOperationsAborted := True;
end;

if SHFileOperation(lpFileOp) = 0 then
ShowMessage('SHFileOperation OK.')
else
ShowMessage('SHFileOperation Fail!!');
end;

档案s 删除并送至资源回收筒?

procedure TForm1.Button1Click(Sender: TObject);
var
APath : AnsiString;
lpFileOp: TSHFileOpStruct;
begin
// must end with double-#0
APath :=
'D:/temp/test123/l.txt'#0'D:/temp/test123/l3.txt'#0#0;
with lpFileOp do
begin
Wnd := Self.Handle;
wFunc := FO_DELETE;
pFrom := pchar(APath);
pTo := nil;
fFlags := FOF_ALLOWUNDO;
hNameMappings := nil;
lpszProgressTitle := nil;
fAnyOperationsAborted := True;
end;

if SHFileOperation(lpFileOp) = 0 then
ShowMessage('SHFileOperation OK.')
else
ShowMessage('SHFileOperation Fail!!');
end;

 
接受答案,
不好意思,我是初学编程,并且初学上网的,一切都是新的,对我来说。
前几天一下子把分送完了,弄得我找不到自己的问题在哪儿,登录后又不能再提问了。
只好暂时先离开,偶尔一次,又可以重新登录了,并且找到了自己的问题,呵呵,
并且知道了如何接受答案。
//我的问题很简单,面对热心的朋友,我只有一句话,谢谢你们,回复这么简单的问题。
//所以,正因为这样吧,我浏览到简单的问题,只要自己能够回答,时间不是很紧张的
//话,就尽力回复。
 
后退
顶部