Помещаем файл в "Корзину" (Recycle Bin)Этим занимается API функция оболочки под названием SHFileOperation, объявленная в shellapi.h. Для того, чтобы воспользоваться этой функцией, необходимо заполнить специальную структуру SHFILEOPSTRUCT, которая указывает, какую операцию необходимо проделать, какой файл необходимо удалить, а так же другую важную информацию: int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
struct SHFILEOPSTRUCT{
HWND hwnd; // NULL (диалога прогреса, не
// используем)
UINT wFunc; // FO_DELETE (операция удаления)
LPCTSTR pFrom; // имя файла(ов) для удаления
LPCTSTR pTo; // NULL (для удаления не используется)
FILEOP_FLAGS fFlags; // см. ниже
BOOL fAnyOperationsAborted; // (возвращает TRUE если пользователь
// прервал) не используем
LPVOID hNameMappings; // для удаления не используется
LPCSTR lpszProgressTitle; // для удаления не используется
};
// Используемые флаги
#define FOF_SILENT 0x0004 // не показывать процесс удаления
#define FOF_NOERRORUI 0x0400 // не выводить ошибки
#define FOF_ALLOWUNDO 0x0040 // ОБЯЗАТЕЛЬНО для корзины!!!
#define FOF_NOCONFIRMATION 0x0010 // Не спрашивать пользователя OK
// для подтверждения удаления
SHFileOperation позволяет копировать, удалять, перемещать или переименовывать один или несколько файлов. Итак, теперь о главном. Для того, чтобы удалить файл с помещением его в корзину, необходимо использовать флаг FOF_ALLOWUNDO, присвоив значение pFrom равное FO_DELETE. Если же задать только имя файла без пути, то файл будет удалён без помещения в корзину. Прилагаемый пример содержит небольшой
класс CRecycleFile, который призван упростить данную
процедуру. Пример представляет из себя
консольное приложение: LPCTSTR pszPathName = GetFileNameSomehow(); // полный путь с именем! CRecycleFile rf; rf.Recycle(pszPathName); Что может быть проще этого? Исходный код примера можно посмотреть здесь.
|