我正在使用以下函数将文件删除到回收站:(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);
}
这适用于大多数文件。但是如果path + filename超过255个字符(并且仍然比2048个字符短得多),SHFileOperation将返回124.这是DE_INVALIDFILES。
但是怎么了?我检查了一百万次。该路径是双空终止的,我没有使用\\?\,它适用于短文件名。
我完全没有想法......
答案 0 :(得分:0)
回收站不支持路径长度超过MAX_PATH的文件。您可以尝试在资源管理器中回收此类文件来自行验证 - 您将收到有关路径太长的错误消息。