次の関数を使用してファイルをごみ箱に削除しています: (C++、MFC、Unicode)
bool DeleteFileToPaperbasket (CString filename)
{
TCHAR Buffer[2048+4];
_tcsncpy_s (Buffer, 2048+4, filename, 2048);
Buffer[_tcslen(Buffer)+1]=0; //Double-Null-Termination
SHFILEOPSTRUCT s;
s.hwnd = NULL;
s.wFunc = FO_DELETE;
s.pFrom = Buffer;
s.pTo = NULL;
s.fFlags = FOF_ALLOWUNDO | FOF_SILENT | FOF_NOERRORUI;
s.fAnyOperationsAborted = false;
s.hNameMappings = NULL;
s.lpszProgressTitle = NULL;
int rc = SHFileOperation(&s);
return (rc==0);
}
これは、ほとんどのファイルでうまく機能します。ただし、パスとファイル名が 255 文字を超える場合 (それでも 2048 文字よりはるかに短い場合)、SHFileOperation は 124 を返します。これは DE_INVALIDFILES です。
しかし、何が問題なのですか?私はすべてを100万回チェックしました。パスは二重ヌルで終了します。\\?\ は使用していません。短いファイル名でも機能します。
私は完全にアイデアがありません...