如何解决我无法删除要回收站的文件
| 我无法删除要回收站的文件。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个字符)。
解决方法
根据SHFileOperation的文档,您不应使用GetLastError来查看操作是否成功。检查函数的结果,并使用文档找出它返回的错误。那应该给您一个更好的线索,说明问题出在哪里。
编辑:
阅读文档的最佳猜测:
pFrom
尽管此成员被声明为
单个以null终止的字符串,它是
实际上可以容纳的缓冲区
多个以空值分隔的文件名。
每个文件名均以
单个NULL字符。最后一个文件
名称以双NULL终止
字符(\“ \\ 0 \\ 0 \”)表示结束
缓冲区的
因此,您应确保pFrom以双0结尾。请尝试以下操作
pFrom := PChar(FileName + #0);
另外,您使用的是哪个Delphi版本?
编辑2:
还要确保将结构正确初始化为0。取消注释FillChar
, 这对我有用:
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;
, 您可能需要设置fFlags:= FOF_SILENT + FOF_ALLOWUNDO + FOF_NOCONFIRMATION
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。