Суббота
28.06.2025, 07:15
C++ Soft
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории каталога
Windows API [25]
Каталог Windows API функций
Функции конвер. [3]
Функции конвертирования типов данных
Работа с сетью [3]
Недокументированные способы работы с сетью
Другие статьи... [8]
Недокументированные способы программирования

Наш опрос
Оцените мой сайт
Всего ответов: 35

Главная » Статьи » Visual C++ Win32 » Другие статьи...

Функция SHFileOperation
Она копирует, перемещает, переименовывает, или удаляет объект файловой системы. Эта функция была заменена в Windows Vista на IFileOperation.

Синтаксис:
int SHFileOperation
(      
    LPSHFILEOPSTRUCT lpFileOp
);

Параметры:
lpFileOp:
Указатель на структуру SHFILEOPSTRUCT, которая содержит нужную информацию: путь к файлу или папке, действие которое надо совершить... Этот параметр должен содержать действительное значение, которое не нулевое. Вы ответственны за проверку достоверности значение. Если файл не найден могут быть неожиданные результаты!
Для проверки существования файла можно использовать функцию GetFileAttributes("путь к файлу"), если файл не найден возвратит -1.

Возвращаемое значение:
Если успешно возвращает NULL, иначе отличное от нуля. Обычно не стоит вдаваться в подробности ошибки.
 
Не используйте GetLastError с возвращаемыми значениями этой функции.
 
Кодзначениесвойство
DE_SAMEFILE0x71Исходный и назначенный файлы - тот же файл.
DE_MANYSRC1DEST0x72Множественные пути файла были указаны в исходном буфере, но только один путь выходного файла.
DE_DIFFDIR0x73Была указана операция переименования, но путь назначения - другой каталог. Используйте операцию перемещения.
DE_ROOTDIR0x74Источник - корневой каталог, который не может быть перемещен или переименован.
DE_OPCANCELLED0x75Операция была отменена пользователем, или автоматически отменена, если соответствующие флажки были поставлены в SHFileOperation.
DE_DESTSUBTREE0x76Адресат - subtree источника.
DE_ACCESSDENIEDSRC0x78Установки защиты отклонили доступ к источнику.
DE_PATHTOODEEP0x79Исходный или назначение путь превысил или превысил бы MAX_PATH.
DE_MANYDEST0x7AОперация включила множественные пути назначения, которые могут терпеть неудачу в случае операции перемещения.
DE_INVALIDFILES0x7CПуть в источнике или адресате или оба был недействителен.
DE_DESTSAMETREE0x7DИсточник и адресат имеют ту же родительскую папку.
DE_FLDDESTISFILE0x7EПуть назначения - существующий файл.
DE_FILEDESTISFLD0x80Путь назначения - существующая папка.
DE_FILENAMETOOLONG0x81Название файла превышает MAX_PATH.
DE_DEST_IS_CDROM0x82Место назначения - доступный только для чтения CD-ROM, возможно не форматированный.
DE_DEST_IS_DVD0x83Место назначения - доступный только для чтения DVD, возможно не форматированный.
DE_DEST_IS_CDRECORD0x84Место назначения - перезаписываемый CD-ROM, возможно не форматированный.
DE_FILE_TOO_LARGE0x85Файл, вовлеченный в действие, слишком большой для файловой системы.
DE_SRC_IS_CDROM0x86Источник - доступный только для чтения CD-ROM, возможно не форматированный.
DE_SRC_IS_DVD0x87Источник - доступный только для чтения DVD, возможно не форматированный.
DE_SRC_IS_CDRECORD0x88Источник - перезаписываемый CD-ROM, возможно не форматированный.
DE_ERROR_MAX0xB7MAX_PATH был превышен в течение действия.

0x402Неизвестная ошибка. Это есть обычно благодаря invalid пути в источнике или места назначения. Эта ошибка не происходит в Windows Vista и позже.
ERRORONDEST0x10000Неопределенная ошибка произошла на месте назначения.
DE_ROOTDIR | ERRORONDEST0x10074Место назначения является корневым каталогом и не может быть переименован.
 

Замечания:
Вы должны использовать полный путь к файлам или к папкам.

Информация:
Минимальная версия 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);
Категория: Другие статьи... | Добавил: Admin (05.06.2008)
Просмотров: 7196 | Комментарии: 2 | Рейтинг: 5.0/2 |
Всего комментариев: 2
2 Алекс  
0
Спасибо за статью - полезна мне для VB6 - давно хотел узнать получше об этой функции!

1 Admin  
0
Не забудьте подключить: shellapi.h cool

Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Copyright MyCorp © 2025
Сайт управляется системой uCoz