Она копирует, перемещает, переименовывает, или удаляет объект файловой системы. Эта функция была заменена в Windows Vista на IFileOperation.
Синтаксис: int SHFileOperation ( LPSHFILEOPSTRUCT lpFileOp );
Параметры: lpFileOp: Указатель на структуру SHFILEOPSTRUCT, которая содержит нужную информацию: путь к файлу или папке, действие которое надо совершить... Этот параметр должен содержать действительное значение, которое не нулевое. Вы ответственны за проверку достоверности значение. Если файл не найден могут быть неожиданные результаты! Для проверки существования файла можно использовать функцию GetFileAttributes("путь к файлу"), если файл не найден возвратит -1.
Возвращаемое значение: Если успешно возвращает NULL, иначе отличное от нуля. Обычно не стоит вдаваться в подробности ошибки. Не используйте GetLastError с возвращаемыми значениями этой функции. Код | значение | свойство | DE_SAMEFILE | 0x71 | Исходный и назначенный файлы - тот же файл. | DE_MANYSRC1DEST | 0x72 | Множественные пути файла были указаны в исходном буфере, но только один путь выходного файла. | DE_DIFFDIR | 0x73 | Была указана операция переименования, но путь назначения - другой каталог. Используйте операцию перемещения. | DE_ROOTDIR | 0x74 | Источник - корневой каталог, который не может быть перемещен или переименован. | DE_OPCANCELLED | 0x75 | Операция была отменена пользователем, или автоматически отменена, если соответствующие флажки были поставлены в SHFileOperation. | DE_DESTSUBTREE | 0x76 | Адресат - subtree источника. | DE_ACCESSDENIEDSRC | 0x78 | Установки защиты отклонили доступ к источнику. | DE_PATHTOODEEP | 0x79 | Исходный или назначение путь превысил или превысил бы MAX_PATH. | DE_MANYDEST | 0x7A | Операция включила множественные пути назначения, которые могут терпеть неудачу в случае операции перемещения. | DE_INVALIDFILES | 0x7C | Путь в источнике или адресате или оба был недействителен. | DE_DESTSAMETREE | 0x7D | Источник и адресат имеют ту же родительскую папку. | DE_FLDDESTISFILE | 0x7E | Путь назначения - существующий файл. | DE_FILEDESTISFLD | 0x80 | Путь назначения - существующая папка. | DE_FILENAMETOOLONG | 0x81 | Название файла превышает MAX_PATH. | DE_DEST_IS_CDROM | 0x82 | Место назначения - доступный только для чтения CD-ROM, возможно не форматированный. | DE_DEST_IS_DVD | 0x83 | Место назначения - доступный только для чтения DVD, возможно не форматированный. | DE_DEST_IS_CDRECORD | 0x84 | Место назначения - перезаписываемый CD-ROM, возможно не форматированный. | DE_FILE_TOO_LARGE | 0x85 | Файл, вовлеченный в действие, слишком большой для файловой системы. | DE_SRC_IS_CDROM | 0x86 | Источник - доступный только для чтения CD-ROM, возможно не форматированный. | DE_SRC_IS_DVD | 0x87 | Источник - доступный только для чтения DVD, возможно не форматированный. | DE_SRC_IS_CDRECORD | 0x88 | Источник - перезаписываемый CD-ROM, возможно не форматированный. | DE_ERROR_MAX | 0xB7 | MAX_PATH был превышен в течение действия. |
| 0x402 | Неизвестная ошибка. Это есть обычно благодаря invalid пути в источнике или места назначения. Эта ошибка не происходит в Windows Vista и позже. | ERRORONDEST | 0x10000 | Неопределенная ошибка произошла на месте назначения. | DE_ROOTDIR | ERRORONDEST | 0x10074 | Место назначения является корневым каталогом и не может быть переименован. |
Замечания: Вы должны использовать полный путь к файлам или к папкам.
Информация: Минимальная версия DLL | shell32.dll версии 4.0 или более поздней | Пользовательские осуществление | Нет | Header | shellapi.h | Импорт библиотеки | shell32.lib | Минимальные операционные системы | Windows NT 4.0, Windows 95 | Юникод | Применяется как ANSI и Unicode версии.
|
Примеры:
- Переименовываем папку
Задача: Переименовать папку по адресу D:\1234\22 в папку D:\1234\333
#include <shellapi.h>
char chFrom [256], chTo [256]; strcpy (chFrom, "D:\\1234\\22"); strcpy (chTo, "D:\\1234\\333");
chFrom[strlen(chFrom)] = 0; //Добавляем два нуля к концу строки chFrom[strlen(chFrom) + 1] = 0;
chTo[strlen(chTo)] = 0; //Добавляем два нуля к концу строки chTo[strlen(chTo) + 1] = 0;
SHFILEOPSTRUCTA lpFileOp; lpFileOp.hwnd = 0; lpFileOp.wFunc = FO_RENAME; lpFileOp.pFrom = chFrom; lpFileOp.pTo = chTo; lpFileOp.fFlags = FOF_NOERRORUI|FOF_NOCONFIRMATION|FOF_SILENT; lpFileOp.fAnyOperationsAborted = 0; lpFileOp.hNameMappings = 0; lpFileOp.lpszProgressTitle = 0; SHFileOperation (&lpFileOp);
|