Вопрос

Программирую под 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top