SHFileOperation FOF_ALLOWUNDO在长文件名上失败

时间:2012-08-28 08:04:11

标签: windows mfc shfileoperation

我正在使用以下函数将文件删除到回收站:(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。

但是怎么了?我检查了一百万次。该路径是双空终止的,我没有使用\\?\,它适用于短文件名。

我完全没有想法......

1 个答案:

答案 0 :(得分:0)

回收站不支持路径长度超过MAX_PATH的文件。您可以尝试在资源管理器中回收此类文件来自行验证 - 您将收到有关路径太长的错误消息。