CopyFileTransactedA 함수(winbase.h)
[Microsoft는 개발자가 애플리케이션의 요구 사항을 달성하기 위해 대체 수단을 활용하는 것이 좋습니다. TxF가 개발된 많은 시나리오는 더 간단하고 쉽게 사용할 수 있는 기술을 통해 달성할 수 있습니다. 또한 이후 버전의 Microsoft Windows에서는 TxF를 사용할 수 없습니다. 자세한 내용 및 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
[in, optional] lpData
콜백 함수에 전달할 인수입니다. 이 매개 변수는 NULL
[in, optional] pbCancel
복사 작업 중에 이 플래그가 TRUE
[in] dwCopyFlags
파일을 복사하는 방법을 지정하는 플래그입니다. 이 매개 변수는 다음 값의 조합일 수 있습니다.
[in] hTransaction
트랜잭션에 대한 핸들입니다. 이 핸들은 CreateTransaction 함수에서 반환됩니다.
반환 값
함수가 성공하면 반환 값은 0이 아닌 값입니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError
사용자가 작업을 취소하여
lpProgressRoutine 사용자가 작업을 중지하여 PROGRESS_STOP 반환하는 경우 copyFileTransacted 0을 반환하고 GetLastErrorERROR_REQUEST_ABORTED반환합니다. 이 경우 부분적으로 복사된 대상 파일은 그대로 유지됩니다.
이미 롤백된 트랜잭션에 대한 핸들을 사용하여 이 함수를 호출하려고 하면 copyFileTransacted
발언
이 함수는 확장 특성, 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_FAIL_IF_EXISTS 지정되고 대상 파일이 기존 기호 링크인 경우 기호 링크의 대상이 있는 경우에만 작업이 실패합니다.
- COPY_FILE_FAIL_IF_EXISTS 지정하지 않으면 동작이 변경되지 않습니다.
링크 추적은 TxF에서 지원되지 않습니다.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술에서 지원됩니다.
기술 | 지원 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | 아니요 |
SMB 3.0 TFO(투명한 장애 조치(failover) | 아니요 |
SO(스케일 아웃 파일 공유)가 있는 SMB 3.0 | 아니요 |
CsvFS(클러스터 공유 볼륨 파일 시스템) | 아니요 |
ReFS(복원 파일 시스템) | 아니요 |
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