Поделиться через


Функция CopyFileTransactedA (winbase.h)

[Корпорация Майкрософт настоятельно рекомендует разработчикам использовать альтернативные средства для достижения потребностей вашего приложения. Многие сценарии, для которые TxF был разработан, можно достичь с помощью более простых и более доступных методов. Кроме того, TxF может быть недоступна в будущих версиях Microsoft Windows. Дополнительные сведения и альтернативные варианты TxF см. в разделе Альтернативные варианты использования транзакционных NTFS.]

Копирует существующий файл в новый файл в виде транзакции, уведомляя приложение о ходе выполнения с помощью функции обратного вызова.

Синтаксис

BOOL CopyFileTransactedA(
  [in]           LPCSTR             lpExistingFileName,
  [in]           LPCSTR             lpNewFileName,
  [in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
  [in, optional] LPVOID             lpData,
  [in, optional] LPBOOL             pbCancel,
  [in]           DWORD              dwCopyFlags,
  [in]           HANDLE             hTransaction
);

Параметры

[in] lpExistingFileName

Имя существующего файла.

По умолчанию имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, добавьте "\\?\" в путь. Дополнительные сведения см. в именовании файлов, путей и пространств имен.

Кончик

Начиная с Windows 10 версии 1607, вы можете отказаться от ограничения MAX_PATH без предустановки "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" файлы именования, пути и пространства имен.>.

Если lpExistingFileName нет, функция CopyFileTransacted завершается ошибкой, а функция GetLastError возвращает ERROR_FILE_NOT_FOUND.

Файл должен находиться на локальном компьютере; в противном случае функция завершается ошибкой, а для последнего кода ошибки задано значение ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.

[in] lpNewFileName

Имя нового файла.

По умолчанию имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, добавьте "\\?\" в путь. Дополнительные сведения см. в именовании файлов, путей и пространств имен.

Кончик

Начиная с Windows 10 версии 1607, вы можете отказаться от ограничения MAX_PATH без предустановки "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" файлы именования, пути и пространства имен.

[in, optional] lpProgressRoutine

Адрес функции обратного вызова типа LPPROGRESS_ROUTINE, вызываемой при каждом копировании другой части файла. Этот параметр может быть NULL. Дополнительные сведения о функции обратного вызова хода выполнения см. в функции CopyProgressRoutine.

[in, optional] lpData

Аргумент, передаваемый функции обратного вызова. Этот параметр может быть NULL.

[in, optional] pbCancel

Если этот флаг имеет значение TRUE во время операции копирования, операция отменяется. В противном случае операция копирования продолжится.

[in] dwCopyFlags

Флаги, указывающие способ копирования файла. Этот параметр может быть сочетанием следующих значений.

Ценность Значение
COPY_FILE_COPY_SYMLINK
0x00000800
Если исходный файл является символьной ссылкой, целевой файл также является символьной ссылкой, указывающей на тот же файл, на который указывает исходная символьная ссылка.
COPY_FILE_FAIL_IF_EXISTS
0x00000001
Операция копирования завершается сбоем, если целевой файл уже существует.
COPY_FILE_OPEN_SOURCE_FOR_WRITE
0x00000004
Файл копируется, и исходный файл открывается для доступа на запись.
COPY_FILE_RESTARTABLE
0x00000002
Ход выполнения копирования отслеживается в целевом файле в случае сбоя копирования. Неудачная копия может быть перезапущена позже, указав те же значения для lpExistingFileName и lpNewFileName, как те, которые использовались в вызове, который завершился сбоем. Это может значительно замедлить операцию копирования, так как новый файл может быть сброшен несколько раз во время операции копирования.

[in] hTransaction

Дескриптор транзакции. Этот дескриптор возвращается функцией CreateTransaction.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенный вызов сведений об ошибке GetLastError.

Если lpProgressRoutine возвращает PROGRESS_CANCEL из-за отмены операции, CopyFileTransacted вернет ноль и GetLastError вернет ERROR_REQUEST_ABORTED. В этом случае частично скопированный целевой файл удаляется.

Если lpProgressRoutine возвращает PROGRESS_STOP из-за остановки операции, CopyFileTransacted вернет ноль и GetLastError вернет ERROR_REQUEST_ABORTED. В этом случае частично скопированный целевой файл остается нетронутым.

Если вы пытаетесь вызвать эту функцию с дескриптором транзакции, которая уже была откатена, CopyFileTransacted вернет ERROR_TRANSACTION_NOT_ACTIVE или ERROR_INVALID_TRANSACTION.

Замечания

Эта функция сохраняет расширенные атрибуты, структурированное хранилище OLE, альтернативные потоки данных NTFS, атрибуты безопасности и атрибуты файла.

Windows 7, Windows Server 2008 R2, Windows Server 2008 и Windows Vista: атрибуты ресурсов безопасности (ATTRIBUTE_SECURITY_INFORMATION) для существующего файла не копируются в новый файл до Windows 8 и Windows Server 2012.

Эта функция завершается ошибкой ERROR_ACCESS_DENIED, если целевой файл уже существует и имеет набор атрибутов FILE_ATTRIBUTE_HIDDEN или FILE_ATTRIBUTE_READONLY.

Зашифрованные файлы не поддерживаются TxF.

Если указан COPY_FILE_COPY_SYMLINK, применяются следующие правила:

  • Если исходный файл является символьной ссылкой, то символьная ссылка копируется, а не целевой файл.
  • Если исходный файл не является символьной ссылкой, изменения в поведении отсутствуют.
  • Если целевой файл является существующей символьной ссылкой, символьная ссылка перезаписывается, а не целевой файл.
  • Если COPY_FILE_FAIL_IF_EXISTS также указан, а целевой файл является существующей символьной ссылкой, операция завершается ошибкой во всех случаях.
Если COPY_FILE_COPY_SYMLINK не задано, применяются следующие правила:
  • Если COPY_FILE_FAIL_IF_EXISTS также указан, а целевой файл является существующей символьной ссылкой, операция завершается ошибкой, только если целевой объект символьной ссылки существует.
  • Если COPY_FILE_FAIL_IF_EXISTS не задано, в поведении нет изменений.

Отслеживание ссылок не поддерживается TxF.

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технологии Поддержанный
Протокол SMB 3.0 Нет
Отработка отказа SMB 3.0 (TFO) Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Нет
Отказоустойчивая файловая система (ReFS) Нет
 

Обратите внимание, что SMB 3.0 не поддерживает TxF.

Заметка

Заголовок winbase.h определяет CopyFileTransacted как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

CopyProgressRoutine

CreateFileTransacted

Константы атрибутов файлов

функции управления файлами

MoveFileTransacted

символьные ссылки

транзакционных NTFS