다음을 통해 공유


PathCanonicalizeA 함수(shlwapi.h)

"." 및 ".."와 같은 탐색 요소를 제거하여 경로를 간소화하여 직접적이고 올바른 형식의 경로를 생성합니다.

참고 이 함수를 잘못 사용하면 버퍼 오버런이 발생할 수 있습니다. 안전한 PathCchCanonicalize 또는 PathCchCanonicalizeEx 함수를 대신 사용하는 것이 좋습니다.
 

구문

BOOL PathCanonicalizeA(
  [out] LPSTR  pszBuf,
  [in]  LPCSTR pszPath
);

매개 변수

[out] pszBuf

형식: LPTSTR

정식화된 경로를 수신하는 문자열에 대한 포인터입니다. 이 버퍼의 크기를 MAX_PATH 설정하여 반환된 문자열을 저장할 수 있을 만큼 커야 합니다.

[in] pszPath

형식: LPCTSTR

정규화할 경로를 포함하는 최대 길이 MAX_PATH null로 끝나는 문자열에 대한 포인터입니다.

반환 값

형식: BOOL

결과가 계산되고 lpszDst 출력 버퍼의 내용이 유효한 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE 를 반환하고 lpszDst 가 가리키는 버퍼의 내용이 잘못되었습니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

이 함수를 사용하면 경로에 특수 문자 시퀀스를 삽입하여 경로에서 제거할 내용을 지정할 수 있습니다. ".." 시퀀스는 현재 위치에서 이전 경로 세그먼트로 경로 세그먼트를 제거하도록 나타냅니다. "." 시퀀스는 다음 경로 세그먼트에서 다음 경로 세그먼트로 건너뛰는 것을 나타냅니다. 경로의 루트 세그먼트를 제거할 수 없습니다.

경로 세그먼트보다 더 많은 ".." 시퀀스가 있는 경우 함수는 TRUE 를 반환하고 lpszDst 가 가리키는 버퍼의 내용에는 루트 ""만 포함됩니다.

예제


#include <windows.h>
#include <iostream>
#include "Shlwapi.h"

using namespace std;

int main( void )
{
// Path_1 destination buffer.
char buffer_1[MAX_PATH] = "JustABufferToHoldTheCanonicalizedPathForAnExample";
char *lpStr1;
lpStr1 = buffer_1;

// Path_2 to be Canonicalized.
char buffer_2[ ] = "A:\\name_1\\.\\name_2\\..\\name_3";
char *lpStr2;
lpStr2 = buffer_2;

// Path_3 to be Canonicalized.
char buffer_3[ ] = "A:\\name_1\\..\\name_2\\.\\name_3";
char *lpStr3;
lpStr3 = buffer_3;

// Path_4 to be Canonicalized.
char buffer_4[ ] = "A:\\name_1\\name_2\\.\\name_3\\..\\name_4";
char *lpStr4;
lpStr4 = buffer_4;

// Path_5 to be Canonicalized.
char buffer_5[ ] = "A:\\name_1\\.\\name_2\\.\\name_3\\..\\name_4\\..";
char *lpStr5;
lpStr5 = buffer_5;

// Path_6 to be Canonicalized.
char buffer_6[ ] = "C:\\..";
char *lpStr6;
lpStr6 = buffer_6;

cout << "The un-canonicalized path 2 is : " << lpStr2
     << "\nThe return value is            : " 
     << PathCanonicalize(lpStr1,lpStr2)
     << "\nThe canonicalized path 1 is    : " << lpStr1 << endl;

cout << "\nThe un-canonicalized path 3 is : " << lpStr3
     << "\nThe return value is            : " 
     << PathCanonicalize(lpStr1,lpStr3)
     << "\nThe canonicalized path 1 is    : " << lpStr1 << endl;

cout << "\nThe un-canonicalized path 4 is : " << lpStr4
     << "\nThe return value is            : " 
     << PathCanonicalize(lpStr1,lpStr4)
     << "\nThe canonicalized path 1 is    : " << lpStr1 << endl;

cout << "\nThe un-canonicalized path 5 is : " << lpStr5
     << "\nThe return value is            : " 
     << PathCanonicalize(lpStr1,lpStr5) 
     << "\nThe canonicalized path 1 is    : " << lpStr1 << endl;

cout << "\nThe un-canonicalized path 6 is : " << lpStr6
     << "\nThe return value is            : " 
     << PathCanonicalize(lpStr1,lpStr6)
     << "\nThe canonicalized path 1 is    : " << lpStr1 << endl;
}
OUTPUT:
---------
The un-canonicalized path 2 is : A:\name_1\.\name_2\..\name_3
The return value is            : 1
The canonicalized path 1 is    : A:\name_1\name_3

The un-canonicalized path 3 is : A:\name_1\..\name_2\.\name_3
The return value is            : 1
The canonicalized path 1 is    : A:\name_2\name_3

The un-canonicalized path 4 is : A:\name_1\name_2\.\name_3\..\name_4
The return value is            : 1
The canonicalized path 1 is    : A:\name_1\name_2\name_4

The un-canonicalized path 5 is : A:\name_1\.\name_2\.\name_3\..\name_4\..
The return value is            : 1
The canonicalized path 1 is    : A:\name_1\name_2

The un-canonicalized path 6 is : C:\..
The return value is            : 1
The canonicalized path 1 is    : C:\

참고

shlwapi.h 헤더는 PATHCanonicalize를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional, Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 shlwapi.h
라이브러리 Shlwapi.lib
DLL Shlwapi.dll(버전 4.71 이상)