MoveFileExA 함수(winbase.h)
다양한 이동 옵션을 사용하여 자식을 포함하여 기존 파일 또는 디렉터리를 이동합니다.
이 작업을 트랜잭션 작업으로 수행하려면 MoveFileTransacted 함수를 사용합니다.
통사론
BOOL MoveFileExA(
[in] LPCSTR lpExistingFileName,
[in, optional] LPCSTR lpNewFileName,
[in] DWORD dwFlags
);
매개 변수
[in] lpExistingFileName
로컬 컴퓨터의 파일 또는 디렉터리의 현재 이름입니다.
dwFlagsMOVEFILE_DELAY_UNTIL_REBOOT지정하는 경우 지연된 작업은 네트워크를 사용할 수 있기 전에 수행되므로 원격 공유에 파일이 있을 수 없습니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 이름 지정 파일, 경로 및 네임스페이스참조하세요.
팁
Windows 10 버전 1607부터 "\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 명명 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을.
[in, optional] lpNewFileName
로컬 컴퓨터의 파일 또는 디렉터리의 새 이름입니다.
파일을 이동할 때 대상은 다른 파일 시스템 또는 볼륨에 있을 수 있습니다. 대상이 다른 드라이브에 있는 경우 dwFlagsMOVEFILE_COPY_ALLOWED 플래그를 설정해야 합니다.
디렉터리를 이동할 때 대상은 동일한 드라이브에 있어야 합니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 이름 지정 파일, 경로 및 네임스페이스참조하세요.
팁
Windows 10 버전 1607부터 "\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 명명 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을.
[in] dwFlags
이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.
반환 값
함수가 성공하면 반환 값은 0이 아닌 값입니다.
함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 얻으려면 GetLastError호출합니다.
발언
dwFlags 매개 변수가 MOVEFILE_DELAY_UNTIL_REBOOT지정하면 레지스트리에 액세스할 수 없으면 MoveFileEx 실패합니다. 이 함수는 다시 시작할 때 이름을 바꿀 파일의 위치를 다음 레지스트리 값에 저장합니다. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
이 레지스트리 값은 REG_MULTI_SZ형식입니다. 각 이름 바꾸기 작업은 이름 바꾸기가 삭제인지 여부에 따라 다음 NULL로 끝나는 문자열 중 하나를 저장합니다.
- szSrcFile\0\0
- szSrcFile\0szDstFile\0
MoveFileEx(szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
MoveFileEx(szSrcFile, szDstFile, MOVEFILE_DELAY_UNTIL_REBOOT);
호출 애플리케이션의 실행이 중단된 후 MOVEFILE_DELAY_UNTIL_REBOOT 플래그로 지정된 실제 이동 및 삭제 작업이 수행되므로 반환 값은 파일 이동 또는 삭제의 성공 또는 실패를 반영할 수 없습니다. 대신 레지스트리에 적절한 항목을 배치하는 데 성공 또는 실패가 반영됩니다.
시스템은 비어 있는 경우에만 MOVEFILE_DELAY_UNTIL_REBOOT 플래그를 사용하여 삭제할 수 있도록 태그가 지정된 디렉터리를 삭제합니다. 디렉터리를 삭제하려면 디렉터리를 삭제하기 전에 디렉터리에서 모든 파일을 이동하거나 삭제합니다. 파일이 부팅 시 디렉터리에 있을 수 있지만 시스템에서 디렉터리를 삭제하려면 먼저 파일을 삭제하거나 이동해야 합니다.
이동 및 삭제 작업은 호출 애플리케이션에 지정된 순서대로 부팅 시 수행됩니다. 부팅 시 파일이 있는 디렉터리를 삭제하려면 먼저 파일을 삭제합니다.
파일이 볼륨 간에 이동되는 경우 MoveFileEx 파일과 함께 보안 설명자를 이동하지 않습니다. 파일에 대상 디렉터리의 기본 보안 설명자가 할당됩니다.
MoveFileEx 함수는 링크 추적 서비스와 작업을 조정하므로 이동될 때 링크 원본을 추적할 수 있습니다.
파일을 삭제하거나 이름을 바꾸려면 파일에 대한 삭제 권한이 있거나 부모 디렉터리에서 자식 권한을 삭제해야 합니다. 자식 삭제 및 삭제를 제외한 모든 액세스 권한이 있는 디렉터리를 설정하고 새 파일의 ACL을 상속하는 경우 파일을 삭제하지 않고도 파일을 만들 수 있어야 합니다. 그러나 파일을 만들고 파일을 만들 때 반환되는 핸들에 대해 요청하는 모든 액세스 권한을 가져올 수 있습니다. 파일을 만들 때 삭제 권한을 요청하는 경우 해당 핸들을 사용하지만 다른 핸들은 사용하지 않고 파일을 삭제하거나 이름을 바꿀 수 있습니다. 자세한 내용은 파일 보안 및 액세스 권한참조하세요.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술에서 지원됩니다.
기술 | 지원 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | 예 |
SMB 3.0 TFO(투명한 장애 조치(failover) | 예 |
SO(스케일 아웃 파일 공유)가 있는 SMB 3.0 | 예 |
CsvFS(클러스터 공유 볼륨 파일 시스템) | 예 |
ReFS(복원 파일 시스템) | 예 |
예제
예제는 임시 파일만들기 및 사용
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |
참고 항목
copyFile
DeleteFile
파일 보안 및 액세스 권한
GetWindowsDirectory
moveFileTransacted
moveFileWithProgress
writePrivateProfileString