다음을 통해 공유


CopyFileTransactedW 함수(winbase.h)

[Microsoft는 개발자가 애플리케이션의 요구 사항을 달성하기 위해 대체 수단을 활용하는 것이 좋습니다. TxF가 개발된 많은 시나리오는 더 간단하고 쉽게 사용할 수 있는 기술을 통해 달성할 수 있습니다. 또한 이후 버전의 Microsoft Windows에서는 TxF를 사용하지 못할 수도 있습니다. TxF에 대한 자세한 내용과 대안은 트랜잭션 NTFS 사용에 대한 대안을 참조하세요.]

트랜잭션 작업으로 기존 파일을 새 파일에 복사하고, 콜백 함수를 통해 애플리케이션에 진행 상황을 알립니다.

구문

BOOL CopyFileTransactedW(
  [in]           LPCWSTR            lpExistingFileName,
  [in]           LPCWSTR            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
복사가 실패할 경우 대상 파일에서 복사 진행률이 추적됩니다. 실패한 복사본은 실패한 호출에 사용된 값과 동일한 lpExistingFileNamelpNewFileName 값을 지정하여 나중에 다시 시작할 수 있습니다. 복사 작업 중에 새 파일이 여러 번 플러시될 수 있으므로 복사 작업의 속도가 크게 느려질 수 있습니다.

[in] hTransaction

트랜잭션에 대한 핸들입니다. 이 핸들은 CreateTransaction 함수에 의해 반환됩니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError를 호출합니다.

사용자가 작업을 취소하여 lpProgressRoutinePROGRESS_CANCEL 반환하는 경우 CopyFileTransacted 는 0을 반환하고 GetLastErrorERROR_REQUEST_ABORTED 반환합니다. 이 경우 부분적으로 복사된 대상 파일이 삭제됩니다.

사용자가 작업을 중지하여 lpProgressRoutinePROGRESS_STOP 반환하는 경우 CopyFileTransacted 는 0을 반환하고 GetLastErrorERROR_REQUEST_ABORTED 반환합니다. 이 경우 부분적으로 복사된 대상 파일은 그대로 유지됩니다.

이미 롤백된 트랜잭션에 대한 핸들을 사용하여 이 함수를 호출하려는 경우 CopyFileTransactedERROR_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 때까지 새 파일에 복사되지 않습니다.

대상 파일이 이미 있고 FILE_ATTRIBUTE_HIDDEN또는 FILE_ATTRIBUTE_READONLY 특성이 설정된 경우 이 함수는 ERROR_ACCESS_DENIED 실패합니다.

암호화된 파일은 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 프로토콜 No
SMB 3.0 TFO(투명 장애 조치(failover)) No
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 No
CsvFS(클러스터 공유 볼륨 파일 시스템) No
ReFS(Resilient File System) No
 

SMB 3.0은 TxF를 지원하지 않습니다.

참고

winbase.h 헤더는 UNICODE 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 CopyFileTransacted를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winbase.h(Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CopyProgressRoutine

CreateFileTransacted

파일 특성 상수

파일 관리 함수

MoveFileTransacted

바로 가기 링크

트랜잭션 NTFS