В. Имеет ли операционная система Windows средства, упрощающие операции над группами файлов и каталогами?
Да, имеется функция SHFileOperation, которая умеет выполнять копирование, перенос, переименование или удаление файловых объектов (т.е. файлов и каталогов, в том числе и вложенных). Данная функция имеет всего один параметр - указатель на структуру, которая и определяет, какую операцию следует произвести, над чем и как. Вот эта структура.
hwnd - дескриптор окна, куда будет выводиться статус операции.
wFunc - код операции. Может принимать следующие значения: FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME. Смысл этих значений, я думаю, Вам понятен.
pFrom - название файла, каталога или группы файлов или каталогов, над которыми будет производиться операция. Если несколько объектов, то имена отделяются символами с кодом 0. Можно выделять списки, которые отделяются друг от друга двумя нулевыми символами.
pTo - имя или группа имен - результат операции, например копирование.
fFlags - флаг, определяет характер операции. Может являться комбинацией следующих констант:
FOF_ALLOWUNDO - сохранить, если возможно, информацию для возвращения в исходное состояние.
FOF_CONFIRMMOUSE - данное значение не реализовано.
FOF_FILESONLY - выполнять только над файлами, если определен шаблон.
FOF_MULTIDESTFILES - указывает, что pTo содержит несколько результирующих файлов или каталогов. Например, можно копировать сразу в несколько каталогов. Если pFrom состоит из нескольких файлов, то каждый файл будет копироваться в свой каталог.
FOF_NOCONFIRMATION - отвечать утвердительно на все запросы.
FOF_NOCONFIRMMKDIR- не подтверждать создание каталога, если это требуется.
FOF_RENAMEONCOLLISION - давать файлам новые имена, если файлы с такими именами уже существуют.
FOF_SILENT - не показывать окно-статус.
FOF_SIMPLEPROGRESS - показывать окно-статус, но не показывать имена файлов.
FOF_WANTMAPPINGHANDLE - заполнять отображаемый файл (см. ниже).
fAnyOperationsAborted - переменная, по которой после операции можно определить, была ли прервана операция (<>0) или нет (0).
hNameMappings - дескриптор отображаемого в памяти файла, содержащего массив, состоящий из новых и старых имен файлов, участвующих в операции.
lpszProgressTitle - указывает на строку-заголовок для диалогового окна-статуса.
Кроме описанной функции, есть еще целая группа функций, начинающихся на SH. Среди них особенно полезна функция SHGetDesktopFolder, осуществляющая вывод диалогового окна для выбора нужной папки каталога.