系统调用级别不正确

时间:2012-10-07 16:55:40

标签: delphi winapi shfileoperation

我正在使用SHFileOperation将文件删除到回收站。但有时我收到“系统调用级别不正确”错误。它不会发生在每次或每个文件中。随机时间只是一些随机文件。谁知道原因?感谢。

更新:这是我正在使用的代码:

function DeleteToRecycleBin(const ADir : WideString) : Integer;
var
  op : SHFILEOPSTRUCTW;
begin
  ZeroMemory(@op, sizeof(op));
  op.pFrom := PWideChar(ADir + #0#0);
  op.wFunc := FO_DELETE;
  op.fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_ALLOWUNDO;
  Result := SHFileOperationW(op); 
end;

1 个答案:

答案 0 :(得分:2)

您收到错误代码124(0x7C)。 Win32错误代码124是ERROR_INVALID_LEVEL。但是,如果您为SHFileOperation()阅读the documentation,则其某些错误代码会在Win32之前生效,因此与Win32错误代码的含义不同。错误代码124是这些值之一。在SHFileOperation()的上下文中,错误124实际上意味着:

  

DE_INVALIDFILES 0x7C

     

源或目标中的路径或两者都无效。

更新:试试这个:

function DeleteToRecycleBin(const ADir : WideString) : Integer;
var
  op : SHFILEOPSTRUCTW;
  sFrom: WideString;
begin
  // +1 to copy the source string's null terminator.
  // the resulting string will have its own null
  // terminator, effectively creating a double
  // null terminated string...
  SetString(sFrom, PWideChar(ADir), Length(ADir)+1);
  
  ZeroMemory(@op, sizeof(op));
  op.pFrom := PWideChar(sFrom);
  op.wFunc := FO_DELETE;
  op.fFlags := FOF_SILENT or FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_ALLOWUNDO;
  
  Result := SHFileOperationW(op); 
end;