У меня есть приложение mfc, которое удаляет файл при нажатии кнопки, файл удаляется, но его недоступно в Корзине. Я хочу, чтобы файл был доступен в корзине. Как мне это сделать.
file.Remove((LPCTSTR)csFilePath.GetBuffer());
Пожалуйста, помогите мне.
Вот код того, что я реализовал в своем классе. Пожалуйста, скажи мне, что я ошибаюсь. Вот код для более подробной информации
void CUtility::DeleteSelectedFile(CString csFilePath)
{ // ensure double-null ending
TCHAR szBuffer[MAX_PATH + 2] = {0};
_tcscpy_s(szBuffer, _countof(szBuffer), (LPCTSTR)csFilePath.GetBuffer());
int nResult;
// set up struct
SHFILEOPSTRUCT pStruct;
pStruct.hwnd = NULL;
pStruct.wFunc = FO_DELETE;
pStruct.pFrom = szBuffer;
pStruct.pTo = NULL;
pStruct.fFlags = FOF_ALLOWUNDO | FOF_SILENT | FOF_NOERRORUI;
pStruct.fAnyOperationsAborted = false;
pStruct.hNameMappings = NULL;
pStruct.lpszProgressTitle = NULL;
// perform the delete
nResult = SHFileOperation(&pStruct);
}
Заранее спасибо.
Вот пример функции, использующей SHFileOperation
:
void CImageRectanglesDlg::DeleteToRecycle(const CString &szFilename)
{
// ensure double-null ending
TCHAR szBuffer[MAX_PATH + 2] = {0};
_tcscpy_s(szBuffer, _countof(szBuffer), szFilename);
// ensure double-null termination
int nLen = szFilename.GetLength();
szBuffer[nLen] = _T('\0');
szBuffer[nLen + 1] = _T('\0');
// set up struct
SHFILEOPSTRUCT pStruct;
pStruct.hwnd = NULL;
pStruct.wFunc = FO_DELETE;
pStruct.pFrom = szBuffer;
pStruct.pTo = NULL;
pStruct.fFlags = FOF_ALLOWUNDO | FOF_NO_UI;
pStruct.fAnyOperationsAborted = false;
pStruct.hNameMappings = NULL;
pStruct.lpszProgressTitle = NULL;
// perform the delete
int nRes = SHFileOperation(&pStruct);
ASSERT(!nRes);
}
Обратите внимание, что вы должны тщательно сконструировать член pFrom
структуры, так как это фактически список путей и должен быть завершен двойным NULL. Вы можете предоставить несколько путей в этом буфере, каждый из которых ограничен одним NULL.
К сожалению, MFC не предоставляет поддержку для Recycled Bin, поэтому правильным способом является использование функции WinAPI → SHFileOperation с флагом FOF_ALLOWUNDO.
Образец кода:
#include <windows.h>
#include <shellapi.h>
SHFILEOPSTRUCT fo = {0};
fo.wFunc = FO_DELETE;
fo.pFrom = filename; // specify full path with doubled zero at the end (\0\0)
fo.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_ALLOWUNDO;
if (SHFileOperation(&fo) == 0)
return true;
Это делается при использовании SHFileOperation и соответственно заполнении параметра FILEOPSTRUCT. Вы должны использовать параметр FO_DELETE.
См. MSDN
SHFileOperation(&pStruct);
возвращает ненулевое значение.