我无法将文件删除到回收站

时间:2011-06-13 15:06:29

标签: delphi

我无法将文件删除到回收站。

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个字符)。

3 个答案:

答案 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

相关问题