SetCurrentDirectory 함수(winbase.h)

현재 프로세스의 현재 디렉터리를 변경합니다.

구문

BOOL SetCurrentDirectory(
  [in] LPCTSTR lpPathName
);

매개 변수

[in] lpPathName

새 현재 디렉터리의 경로입니다. 이 매개 변수는 상대 경로 또는 전체 경로를 지정할 수 있습니다. 두 경우 모두 지정된 디렉터리의 전체 경로가 계산되고 현재 디렉터리로 저장됩니다.

자세한 내용은 이름 지정 파일, 경로 및 네임스페이스를 참조하세요.

기본적으로 이름은 MAX_PATH 문자로 제한됩니다.

Windows 10 버전 1607부터 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 파일, 경로 및 네임스페이스의 최대 경로길이 제한 섹션을 참조하세요.

중요

현재 디렉터리를 MAX_PATH 이상으로 설정하면 CreateProcessW 가 실패합니다.

null 문자 앞의 마지막 문자는 백슬래시('\')여야 합니다. 백슬래시를 지정하지 않으면 백슬래시가 추가됩니다. 따라서 후행 백슬래시를 포함하지 않는 한 경로에 MAX_PATH-2 문자를 지정>합니다. 이 경우 경로에 MAX_PATH-1자를 지정합니다.

반환 값

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

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

설명

각 프로세스에는 두 부분으로 구성된 단일 현재 디렉터리가 있습니다.

  • 콜론 뒤에 드라이브 문자 또는 서버 이름 및 공유 이름(\\servername\sharename)인 디스크 지정자
  • 디스크 지정자의 디렉터리

현재 디렉터리가 프로세스의 모든 스레드에서 공유됩니다. 한 스레드가 현재 디렉터리를 변경하는 경우 프로세스의 모든 스레드에 영향을 줍니다.

다중 스레드 애플리케이션 및 공유 라이브러리 코드는 다른 스레드에서 수행되는 상대 경로 계산에 영향을 줄 위험이 있어 SetCurrentDirectory 함수를 호출하지 않아야 합니다. 반대로

다중 스레드 애플리케이션 및 공유 라이브러리 코드는 다른 스레드에서 수행하는 현재 디렉터리의 변경 내용에 영향을 받지 않도록 상대 경로를 사용하지 않아야 합니다.

참고

프로세스가 실행되는 동안 프로세스의 현재 디렉터리가 잠깁니다. 따라서 디렉터리가 삭제, 이동 또는 이름을 바꿀 수 없습니다.

Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.

기술 지원됨
SMB(서버 메시지 블록) 3.0 프로토콜 Yes
SMB 3.0 TFO(투명 장애 조치(failover)) Yes
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 Yes
CsvFS(클러스터 공유 볼륨 파일 시스템) Yes
ReFS(Resilient File System)

예제

예를 들어 현재 디렉터리 변경을 참조하세요.

요구 사항

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

참고 항목