失敗,我使用下面的函數來刪除文件到回收站:(C++,MFC,Unicode)的SHFileOperation FOF_ALLOWUNDO上的長文件名
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。
但是怎麼了?我檢查了一百萬次。路徑是雙空終止的,我沒有使用\\?\並且它適用於短文件名。
我完全沒了主意......
謝謝,是的,這很有幫助。我試過了IFileOperation :: DeleteFile。採取一些包裝代碼來執行管理,但它的工作原理!謝謝! – user178379
爲了您的觀點2 - 從SHFileOperation函數文檔:'不要使用GetLastError與此函數的返回值.' –