Как удалить папку в корзину
-
12-09-2019 - |
Вопрос
Программирую под C++, MFC, windows.
Я хочу удалить папку в корзину.Как я могу это сделать?
CString filePath = directorytoBeDeletePath;
TCHAR ToBuf[MAX_PATH + 10];
TCHAR FromBuf[MAX_PATH + 10];
ZeroMemory(ToBuf, sizeof(ToBuf));
ZeroMemory(FromBuf, sizeof(FromBuf));
lstrcpy(FromBuf, filePath);
SHFILEOPSTRUCT FileOp;
FileOp.hwnd = NULL
FileOp.wFunc=FO_DELETE;
FileOp.pFrom=FromBuf;
FileOp.pTo = NULL;
FileOp.fFlags=FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
FileOp.hNameMappings=NULL;
bRet=SHFileOperation(&FileOp);
Что-то не так с приведенным выше кодом?Это всегда терпело неудачу.
Я нашел проблему:filePath должен быть:"c:\abc" а не "c:\abc\"
Решение
Возвращаемое значение SHFileOperation является целым и должно указывать код ошибки.Что вы получаете?
Другие советы
я знаю, что это неправильный путь, но если вы не можете найти решение, попробуйте это..
загрузите файл nircmd.exe или другой exe-файл, который может очистить корзину.
затем вы вызываете эти функции с помощью системы («nircmd.exe пустой ящик»)
Вы нашли решение, которое работает, однако это произошло случайно.Настоящая проблема здесь заключается в том, что pFrom
параметр имеет специальный формат.Согласно документам MSDN для ШФИЛЕОПЦ, он хранит список путей к файлам, каждый из которых заканчивается нулем, и дополнительный нуль после последнего.
В вашем случае это работает, потому что FromBuf
Массив длиннее имени файла, и все записи инициализируются нулями.Более общее решение — создать буфер достаточной длины для имени файла, а затем добавить после него два нулевых символа.Обратите внимание, что имена файлов Windows может быть длиннее, чем _MAX_PATH
, например, см. https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file#maximum-path-length-limitation