我无法将文件删除到回收站。
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个字符)。
答案 0 :(得分:10)
根据the documentation of SHFileOperation,您不应该使用GetLastError来查看操作是否成功。检查函数的结果并使用文档来确定它返回的错误。这应该会让你更好地了解问题所在。
编辑:
阅读文档时最好的猜测:
pFrom中
虽然该成员被声明为 单个以null结尾的字符串,它是 实际上是可以容纳的缓冲区 多个以null分隔的文件名。 每个文件名由a终止 单个NULL字符。最后一个文件 name以双NULL结束 字符(“\ 0 \ 0”)表示结束 缓冲区
因此,您应该确保pFrom以双倍0结束。请尝试以下
pFrom := PChar(FileName + #0);
另外,你使用的是什么Delphi版本?
EDIT2:
还要确保将结构正确初始化为0.取消注释FillChar
答案 1 :(得分:4)
这对我有用:
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;
答案 2 :(得分:-1)
您可能需要设置fFlags:= FOF_SILENT + FOF_ALLOWUNDO + FOF_NOCONFIRMATION