Функция CopyFileEx копирует существующий файл в новый файл, уведомляя приложение о своем процессе копирования через функцию обратного вызова.
BOOLCopyFileEx ( LPCTSTRlpExistingFileName , LPCTSTRlpNewFileName , LPPROGRESS_ROUTINElpProgressRoutine , LPVOIDlpData , LPBOOLpbCancel , DWORDdwCopyFlags );
Параметры:
Адрес нульзаканчивающейся строки, которая определяет имя существующего файла. В ANSI-версии этой функции, имя ограничено количеством MAX_PATH символов. Для увеличения этого предела до 32767 расширенных символов, используйте Unicode-версию этой функции и добавив к пути "\\?\". Windows Me/98/95: Эта строка не может превышать MAX_PATH символов. Если lpExistingFileName не существует, CopyFileEx возвращается с ошибкой, и функция GetLastError возвращает ERROR_FILE_NOT_FOUND. | |
Адрес нульзаканчивающейся строки, которая определяет имя нового файла. В ANSI-версии этой функции, имя ограничено количеством MAX_PATH символов. Для увеличения этого предела до 32767 расширенных символов, используйте Unicode-версию этой функции и добавив к пути "\\?\". Windows Me/98/95: Эта строка не может превышать MAX_PATH символов. | |
Адрес функции обратного вызова типа LPPROGRESS_ROUTINE, которая вызывается каждый раз, как еще одна часть файла была скопирована. Этот параметр может быть NULL. Для получения большей информации о функции обратного вызова, смотрите описание функции CopyProgressRoutine. | |
Аргумент, который будет передан функции обратного вызова. Этот парметр может быть NULL. | |
Если этот флаг устанавливается в TRUE в течении операции копирования, операция завершается. В другом случае, операция копирования продолжается до завершения. | |
Флаги, определяющие как будут скопированы файлы. Этот параметр может быть комбинацией следующих значений: COPY_FILE_ALLOW_DECRYPTED_DESTINATION - попытка скопировать зашифрованный файл, будет иметь успех, если файл-назначение не может быть зашифрован. Windows 2000/NT and Windows Me/98/95: Это значение не поддерживается. COPY_FILE_FAIL_IF_EXISTS - операция копирования завершается немедленно, если целевой файл уже существует. COPY_FILE_RESTARTABLE - в случае ошибки, уже скопированные данные сохраняются в файле назначения. Затем можно вызвать эту функцию с теми же аргументами в другой раз. |
Возвращаемые значения:
При успешном завершении, функция возвращает ненулевое значение.
При ошибке возвращается ноль. Для получения дополнительной информации об ошибке, вызовите GetLastError.
Если lpProgressRoutine возвращает PROGRESS_CANCEL, указывая пользователю на аннулирование операции, CopyFileEx возвратит ноль и GetLastError возвратит ERROR_REQUEST_ABORTED. В этом случае, частично скопированный файл удаляется.
Если lpProgressRoutine возвращает PROGRESS_STOP, указывая пользователю на остановку операции, CopyFileEx возвратит ноль и GetLastError возвратит ERROR_REQUEST_ABORTED. В этом случае, частично скопированный файл останется нетронутым.
При ошибке возвращается ноль. Для получения дополнительной информации об ошибке, вызовите GetLastError.
Если lpProgressRoutine возвращает PROGRESS_CANCEL, указывая пользователю на аннулирование операции, CopyFileEx возвратит ноль и GetLastError возвратит ERROR_REQUEST_ABORTED. В этом случае, частично скопированный файл удаляется.
Если lpProgressRoutine возвращает PROGRESS_STOP, указывая пользователю на остановку операции, CopyFileEx возвратит ноль и GetLastError возвратит ERROR_REQUEST_ABORTED. В этом случае, частично скопированный файл останется нетронутым.
Замечания:
Эта фукнция сохраняет дополнительные атрибуты, OLE и NTFS данные и атрибуты файла. Атрибуты безопасности существующего файла не копируются в новый файл. Для того, чтоб скопировать атрибуты безопасности, используйте функцию SHFileOperation.
Эта функция завершается с ошибкой ERROR_ACCESS_DENIED, если файл в месте назначении существует и имеет установленный атрибут FILE_ATTRIBUTE_HIDDEN или FILE_ATTRIBUTE_READONLY.
Когда функция CopyFileEx используется для копирования зашифрованного файла, она пытается зашифровать файл в месте назначения с ключами, используемыми в шифровании файла-источника. Если это не может быть завершено, функция пытается зашифравать файл-назначение с ключами по умолчанию. Если оба метода не могут быть завершены, CopyFileEx завершается с ошибкой ERROR_ENCRYPTION_FAILED. Если вы хотите с помощью CopyFileEx завершить операцию копирования при том, что файл-назначения не может быть зашифрован, добавте COPY_FILE_ALLOW_DECRYPTED_DESTINATION к параметру dwCopyFlags.
Windows 2000: Когда CopyFileEx используется для копирования зашифрованного файла, она пытается зашифровать файл-назначение с ключами по умолчанию. Если он не может быть зашифрован, CopyFileEx завершает копирование без шифрования файла-назначения.
Эта функция завершается с ошибкой ERROR_ACCESS_DENIED, если файл в месте назначении существует и имеет установленный атрибут FILE_ATTRIBUTE_HIDDEN или FILE_ATTRIBUTE_READONLY.
Когда функция CopyFileEx используется для копирования зашифрованного файла, она пытается зашифровать файл в месте назначения с ключами, используемыми в шифровании файла-источника. Если это не может быть завершено, функция пытается зашифравать файл-назначение с ключами по умолчанию. Если оба метода не могут быть завершены, CopyFileEx завершается с ошибкой ERROR_ENCRYPTION_FAILED. Если вы хотите с помощью CopyFileEx завершить операцию копирования при том, что файл-назначения не может быть зашифрован, добавте COPY_FILE_ALLOW_DECRYPTED_DESTINATION к параметру dwCopyFlags.
Windows 2000: Когда CopyFileEx используется для копирования зашифрованного файла, она пытается зашифровать файл-назначение с ключами по умолчанию. Если он не может быть зашифрован, CopyFileEx завершает копирование без шифрования файла-назначения.