GetShortPathNameW 함수(fileapi.h)
지정된 경로의 짧은 경로 형식을 검색합니다.
파일 및 경로 이름에 대한 자세한 내용은 이름 지정 파일, 경로 및 네임스페이스를 참조하세요.
구문
DWORD GetShortPathNameW(
[in] LPCWSTR lpszLongPath,
[out] LPWSTR lpszShortPath,
[in] DWORD cchBuffer
);
매개 변수
[in] lpszLongPath
경로 문자열입니다.
기본적으로 이름은 MAX_PATH 문자로 제한됩니다. 이 제한을 와이드 문자 32,767자로 확장하려면 경로 앞에 "\\?\"를 추가합니다. 자세한 내용은 파일 이름 지정, 경로 및 네임스페이스를 참조하세요.
팁
Windows 10 버전 1607부터 "\\?\" 앞에 추가하지 않고 MAX_PATH 제한을 제거하도록 옵트인할 수 있습니다. 자세한 내용은 파일, 경로 및 네임스페이스의 "최대 경로 길이 제한" 섹션을 참조하세요.
[out] lpszShortPath
lpszLongPath에서 지정하는 경로의 null로 끝나는 짧은 형식을 수신하는 버퍼에 대한 포인터입니다.
이 매개 변수에 대해 NULL 을 전달하고 cchBuffer 에 0을 전달하면 지정된 lpszLongPath에 필요한 버퍼 크기가 항상 반환됩니다.
[in] cchBuffer
tCHAR에서 lpszShortPath가 가리키는 버퍼의 크기입니다.
lpszShortPath가 NULL로 설정된 경우 이 매개 변수를 0으로 설정합니다.
반환 값
함수가 성공하면 반환 값은 종료 null 문자를 포함하지 않고 lpszShortPath에 복사되는 문자열의 길이(TCHAR)입니다.
lpszShortPath 버퍼가 너무 작아서 경로를 포함할 수 없는 경우 반환 값은 경로 및 종료 null 문자를 보유하는 데 필요한 버퍼의 크기(TCHAR)입니다.
다른 이유로 인해 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.
설명
lpszLongPath 매개 변수가 지정하는 경로가 전체 또는 긴 경로일 필요는 없습니다. 짧은 형식은 지정된 경로보다 길 수 있습니다.
반환 값이 cchBuffer 매개 변수에 지정된 값보다 큰 경우 경로를 보유할 수 있을 만큼 큰 버퍼를 사용하여 함수를 다시 호출할 수 있습니다. 동적 할당에 길이가 0인 버퍼를 사용하는 것 외에도 이 사례의 예는 예제 코드 섹션을 참조하세요.
lpszShortPath 매개 변수를 lpszLongPath 매개 변수와 동일한 값으로 설정할 수 있습니다. 즉, 입력 경로 문자열의 주소에 대한 짧은 경로에 대한 출력 버퍼를 설정할 수 있습니다. 항상 cchBuffer 매개 변수가 이 버퍼의 총 크기( TCHAR)를 정확하게 나타내는지 확인합니다.
GetLongPathName 함수를 호출하여 짧은 이름에서 파일의 긴 이름을 가져올 수 있습니다. 또는 GetLongPathName 을 사용할 수 없는 경우 경로의 각 구성 요소에서 FindFirstFile 을 호출하여 해당 긴 이름을 가져올 수 있습니다.
파일 또는 디렉터리에 액세스할 수 있지만 해당 파일 또는 디렉터리의 일부 부모 디렉터리에 대한 액세스 권한은 없습니다. 따라서 경로 구성 요소의 부모 디렉터리를 쿼리하여 해당 구성 요소의 짧은 이름을 확인할 수 없는 경우 GetShortPathName 이 실패할 수 있습니다. 이 검사 이미 짧은 이름의 요구 사항을 충족하는 디렉터리 구성 요소에 대해 건너뛸 수 있습니다. 자세한 내용은 이름 지정 파일, 경로 및 네임스페이스의짧은 이름 및 긴 이름 섹션을 참조하세요.
Windows 8 및 Windows Server 2012에서 이 함수는 다음 기술을 통해 지원됩니다.
기술 | 지원됨 |
---|---|
SMB(서버 메시지 블록) 3.0 프로토콜 | Yes |
SMB 3.0 TFO(투명 장애 조치(failover)) | No |
SO(스케일 아웃 파일 공유)를 사용하는 SMB 3.0 | No |
CsvFS(클러스터 공유 볼륨 파일 시스템) | No |
ReFS(Resilient File System) | Yes |
SMB 3.0은 연속 가용성 기능이 있는 공유에서 짧은 이름을 지원하지 않습니다.
ReFS(복원 파일 시스템)는 짧은 이름을 지원하지 않습니다. 디스크에 짧은 이름이 없는 경로에서 GetShortPathName 을 호출하면 호출이 성공하지만 대신 긴 이름 경로를 반환합니다. 이 결과는 지정된 긴 이름에 대해 짧은 이름이 존재할 것이라는 보장이 없기 때문에 NTFS 볼륨에서도 가능합니다.
예제
GetShortPathName을 사용하는 예제는 GetFullPathName에 대한 예제 코드 섹션을 참조하세요.
다음 C++ 예제에서는 동적으로 할당된 출력 버퍼를 사용하는 방법을 보여 줍니다.//...
long length = 0;
TCHAR* buffer = NULL;
// First obtain the size needed by passing NULL and 0.
length = GetShortPathName(lpszPath, NULL, 0);
if (length == 0) ErrorExit(TEXT("GetShortPathName"));
// Dynamically allocate the correct size
// (terminating null char was included in length)
buffer = new TCHAR[length];
// Now simply call again using same long path.
length = GetShortPathName(lpszPath, buffer, length);
if (length == 0) ErrorExit(TEXT("GetShortPathName"));
_tprintf(TEXT("long name = %s shortname = %s"), lpszPath, buffer);
delete [] buffer;
///...
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | fileapi.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |