CFile :: Удалить, удалить файл из каталога, но файл недоступен

0

У меня есть приложение 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);
}

Заранее спасибо.

Теги:
mfc

3 ответа

0
Лучший ответ

Вот пример функции, использующей 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.

  • 0
    Большое спасибо за помощь с фрагментом кода. Я использовал его в своем коде, но не могу удалить файл. Функция SHFileOperation(&pStruct); возвращает ненулевое значение.
  • 0
    Возвращает КОД ОШИБКИ 124.
Показать ещё 6 комментариев
2

К сожалению, 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;
0

Это делается при использовании SHFileOperation и соответственно заполнении параметра FILEOPSTRUCT. Вы должны использовать параметр FO_DELETE.

См. MSDN

Ещё вопросы

Сообщество Overcoder
Наверх
Меню