0

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;
4

1 に答える 1

2

エラー コード 124 (0x7C) が表示されます。Win32 エラーコード 124 はERROR_INVALID_LEVEL. ただし、のドキュメントを読むSHFileOperation()と、そのエラー コードの一部は Win32 より前のものであるため、同じ Win32 エラー コードと同じ意味を持ちません。エラー コード 124 は、これらの値の 1 つです。のコンテキストでは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;
于 2012-10-07T17:23:46.223 に答える