Delphi 我无法将文件删除到回收站
我无法将文件删除到回收站Delphi 我无法将文件删除到回收站,delphi,Delphi,我无法将文件删除到回收站 VAR SHFileOpStruct: TSHFileOpStruct; begin with SHFileOpStruct do begin wnd := Handle; wFunc := FO_DELETE; pFrom := PChar(FileName); fFlags:= 0; pTo := NIL; hNameMappings:= NIL; lpszProgressTitle:
VAR SHFileOpStruct: TSHFileOpStruct;
begin
with SHFileOpStruct do
begin
wnd := Handle;
wFunc := FO_DELETE;
pFrom := PChar(FileName);
fFlags:= 0;
pTo := NIL;
hNameMappings:= NIL;
lpszProgressTitle:= NIL;
end;
Result:= SHFileOperation(SHFileOpStruct);
end;
我可以删除格式为“1.xyz”的文件,但不能删除格式为“12.xyz”(文件名超过1个字符)的文件。根据,不应使用GetLastError查看操作是否成功。检查函数的结果并使用文档找出它返回的错误。这会让你更好地了解问题所在
编辑:
阅读文档的最佳猜测:
pFrom
虽然该成员被宣布为
单个以null结尾的字符串,它是
实际上是一个可以容纳
多个以空分隔的文件名。
每个文件名都以
单个空字符。最后一个文件
名称以双NULL结尾
字符(“\0\0”)表示结束
缓冲区
因此,您应该确保pFrom以双0结尾。试试下面的方法
pFrom := PChar(FileName + #0);
另外,您使用的是什么Delphi版本
编辑2:
还要确保结构已正确初始化为0。取消对FillChar的注释您可能需要设置fFlags:=FOF_SILENT+FOF_ALLOWUNDO+FOF_NOCONFIRMATION这对我很有效:
function DeleteToRecycleBin(WindowHandle: HWND; Filename: string; Confirm: Boolean): Boolean;
var
SH: TSHFILEOPSTRUCT;
begin
FillChar(SH, SizeOf(SH), 0);
with SH do
begin
Wnd := WindowHandle;
wFunc := FO_DELETE;
pFrom := PChar(Filename + #0);
fFlags := FOF_SILENT or FOF_ALLOWUNDO;
if not Confirm then
begin
fFlags := fFlags or FOF_NOCONFIRMATION
end;
end;
Result := SHFileOperation(SH) = 0;
end;
您如何处理pFrom的内存分配?看来这可能是你的问题。内存位置最多只能容纳1.xyz,不适合12.xyz。该函数的结果是2或87(57hex)。文档中也有此提示,但我不完全理解:“此函数已在Windows Vista中被IFileOperation替换。”。这是否意味着有一个可选的替代函数,或者SHFileOperation被完全替换,在Vista下不应再使用它?参数WindowHandle需要什么窗口句柄?如果这是与{$APPTYPE CONSOLE}一起使用的话会怎么样?@tim11g在这种情况下Wnd:=0;