Работа с корзиной в Delphi
Работа с корзиной в Delphi
Работа с корзиной в Delphi С завидным постоянством появляются вопросы, как мне отправить или удалить файл в корзину(Recycle Bin) Мне известно (возможно их больше) три функции для работы с корзиной в ShellApi: SHFileOperation SHEmptyRecycleBin SHQueryRecycleBin Функция SHFileOperation (объявлена и присутствует в модуле ShellApi) вообще предназначена не только для удаления файлов, но также еще для перемещение, копирования и переименования файлов, и мне можно было ограничиться только описанием ее возможностей только для работы с корзиной, но я опишу все ее функции.Функция объявлена как SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; Единственным ее параметром является структура TSHFileOpStruct .В случае успеха возвращает значение 0. Если вам нужно удалить файл напрямую, гарантировано минуя корзину используйте функцию DeleteFile. TSHFileOpStruct структура используется для указания параметров функции . Опишем ее поля: Wnd хэндл диалогового окна, отображающего статус операции; wFunc тип производимой операции: FO_COPY копировать файл. FO_MOVE переместить файл. FO_DELETE удалить файл. FO_RENAME переименовать файл. pFrom указатель на строку с именем исходного файла. pTo указатель на строку с именем файла, в который копируется, перемещается или переименовывается исходный файл. fFlags флаги определяющие параметры операции. FOF_ALLOWUNDO сохраняет информацию о возможной отмене операции. FOF_FILESONLY выполняет операцию только для файлов, если задана маска файлов. FOF_MULTIDESTFILES указывает, что pTo описывает несколько файлов (по одному на каждый файл источника) вместо одного каталога, куда должны быть помещены исходные файлы. FOF_NOCONFIRMATION отвечает "Да для всех" на все вопросы. FOF_NOCONFIRMMKDIR не требует подтверждения создания нового каталога. FOF_NO_CONNECTED_ELEMENTS С версии 5.0. Не перемещает связанные файлы как группу. Только перемещает указанные файлы FOF_NOCOPYSECURITYATTRIBS С версии 4.71. Не копирует атрибуты безопасности файла. FOF_NOERRORUI Не отображает пользовательский интерфейс при ошибке. FOF_NORECURSION Не поддерживает рекурсивные операции в подкаталогах, работает только в локальном каталоге. FOF_RENAMEONCOLLISION присваивает файлу новое имя при операциях копирования, перемещения или переименования, если файл с указанным именем уже существует. FOF_SILENT не показывает прогресс бар отображающий ход операции. FOF_SIMPLEPROGRESS отображает окно прогресс бара, но не показывает имен файлов. FOF_WANTMAPPINGHANDLE Определяет использование поля hNameMappings. Хендл объекта должен быть освобожден функцией SHFreeNameMappings. Она объявлена в ShellApi как процедура SHFreeNameMappings(hNameMappings: THandle); fAnyOperationsAborted Принимает значение True если операция была прервана или False в ином случае. hNameMappings Хендл объекта содержащего массив структур SHNAMEMAPPING. Каждая структура SHNAMEMAPPINGсодержит старые и новые пути для каждого файла, с которым произведены операции перемещения, копирования, или переименования. Это поле используется, если установлен флаг FOF_WANTMAPPINGHANDLE. lpszProgressTitle указатель на строку заголовка для окна прогресса; используется только, если среди флагов есть FOF_SIMPLEPROGRESS SHEmptyRecycleBin функция для очищения корзины на определенном диске(или на всех) , она не переведена в стандартном модуле ShellApi Delphi, поэтому вы можете воспользоваться моим переводом, либо перевести сами (все вышесказанное также справедливо и к функции SHQueryRecycleBin). Функция объявлена как SHEmptyRecycleBin(Wnd:HWND; pszRootPath:PChar; dwFlags:DWORD):HRESULT; где hwnd Handle родительского или диалогового окно которое может отображаться в течение операции . Этот параметр может быть равен нулю. pszRootPath Указатель на строку PChar содержащею путь к корневому диску на которая находиться корзина. Этот параметр может содержать адрес строки, с путем к какому-нибудь каталогу или подкаталогу, например c:\windows\system... . Это может также содержать пустую строку или Nil. Если это значение - пустая строка или Nil, все корзины на всех дисках будут очищены. dwFlags Может содержать один или несколько параметров из следующих SHERB_NOCONFIRMATION Не показывать диалог подтверждения удаления всех файлов из корзины. SHERB_NOPROGRESSUI Не показывать прогресс бар отображающий удаление файлов из корзины. SHERB_NOSOUND Не подтверждать завершение удаление звуковым сигналом. SHQueryRecycleBin эта функция возвращает размер корзины и количество элементов в ней на определенном диске. Она объявлена как SHQueryRecycleBin(pszRootPath:PANSIChar; var SHQueryRBInfo:TSHQueryRBInfo):HRESULT; Где pszRootPath Указатель на строку PChar содержащею путь к корневому диску на которая находиться корзина. Этот параметр может содержать адрес строки, с путем к какому-нибудь каталогу или подкаталогу, например c:\windows\system... . В Windows 2000, если в параметре pszRootPath пустое значение или Nil, функция возвращают ошибку E_INVALIDARG . Более ранние версии операционной системы позволяют передавать пустую строку или Nil. Если pszRootPath содержит пустую строку или Nil, информация возвращается для всех корзин на всех дисках. PSHQueryRBInfo Указатель на структуру SHQUERYRBINFO, которая получает информацию о корзине. Значение поле структуры CbSize должно быть установлено равным размеру структуры перед запросом этой функции. Объявление этой структуры TSHQueryRBInfo = packed record cbSize : DWORD; i64Size, i64NumItems : TLargeInteger; end; А вот описание полей cbSize Размер структуры, в байтах. Повторюсь, это поле должно быть заполнено до вызова функции. I64Size Полный размер всех элементов в указанной корзине, в байтах. I64NumItems Общее количество элементов в указанной корзине.