2013-11-29 2 views
0

У меня есть приложение mfc, которое удаляет файл при нажатии кнопки, файл удаляется, но его недоступно в Корзине. Я хочу, чтобы файл был доступен в корзине. Как мне это сделать.CFile :: Удалить, удалить файл из каталога, но файл недоступен

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); 
} 

Спасибо заранее.

ответ

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);' возвращает ненулевое значение. – Mayur

+0

Он возвращает ERROR CODE 124. – Mayur

+0

Да, путь к файлу файла такой же, как вы упоминали. Затем, чтобы не удалять файл. – Mayur

0

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

См MSDN

2

Unfortunatelly, 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; 
Смежные вопросы