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가 가리키는 버퍼의 크기입니다.

lpszShortPathNULL로 설정된 경우 이 매개 변수를 0으로 설정합니다.

반환 값

함수가 성공하면 반환 값은 종료 null 문자를 포함하지 않고 lpszShortPath에 복사되는 문자열의 길이(TCHAR)입니다.

lpszShortPath 버퍼가 너무 작아서 경로를 포함할 수 없는 경우 반환 값은 경로 및 종료 null 문자를 보유하는 데 필요한 버퍼의 크기(TCHAR)입니다.

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

설명

lpszLongPath 매개 변수가 지정하는 경로가 전체 또는 긴 경로일 필요는 없습니다. 짧은 형식은 지정된 경로보다 길 수 있습니다.

반환 값이 cchBuffer 매개 변수에 지정된 값보다 큰 경우 경로를 보유할 수 있을 만큼 큰 버퍼를 사용하여 함수를 다시 호출할 수 있습니다. 동적 할당에 길이가 0인 버퍼를 사용하는 것 외에도 이 사례의 예는 예제 코드 섹션을 참조하세요.

참고 이 경우 반환 값은 종료 null 문자를 포함하는 길이이지만 성공의 반환 값에는 종료 null 문자가 개수에 포함되지 않습니다.
 
지정된 경로가 이미 짧은 형식이고 변환이 필요하지 않은 경우 함수는 지정된 경로를 lpszShortPath 매개 변수로 지정된 버퍼에 복사합니다.

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

참고 항목

파일 관리 함수

FindFirstFile

GetFullPathName

GetLongPathName

파일, 경로 및 네임스페이스 이름 지정

SetFileShortName