我正在使用以下函数将文件删除到回收站:(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。
但是怎么了?我检查了一切一百万次。路径是双空终止的,我没有使用 \\?\ 它适用于短文件名。
我完全没有想法...