2010-06-01 4 views
8

유니 코드 경로 이름 (LPWSTR)에서 ASCII 문자로 변환 할 수 있습니까? 호출 된 라이브러리는 c 문자열 만 인식합니다.유니 코드 경로를 C 문자열로 변환하려면 어떻게해야합니까?

편집 : 좋아, 내가 경로에 유니 코드 문자가 포함 된 일부 폴더와 그것을 테스트하고 완벽하게 일의 GetShortPathName와 WideCharToMultiByte는 제안을했다 코드의 조각을 만든 :

wlength = GetShortPathNameW(cpy,0,0); 
LPWSTR shortp = (LPWSTR)calloc(wlength,sizeof(WCHAR)); 
GetShortPathNameW(cpy,shortp,wlength); 
clength = WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, 0, 0, 0, 0); 
LPSTR cpath = (LPSTR)calloc(clength,sizeof(CHAR)); 
WideCharToMultiByte(CP_OEMCP, WC_NO_BEST_FIT_CHARS, shortp, wlength, cpath, clength, 0, 0); 

답변

5

GetShortPathName() 기능

http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

레거시 코드를 사용하기 위해, 같은 파일을 가리키는 당신에게 동등한 8.3 파일 이름을 제공 할 것입니다.

[편집] 이론적으로 레지스트리 설정에 따라 8.3 파일 이름에 비 ASCII 문자가 포함될 수 있지만 이것이 최선일 것입니다. 이 경우 적절한 char *를 얻는 쉬운 방법이 없으며 파일 생성 중 코드 페이지 설정이 현재 설정과 일치하지 않을 경우 GetShortPathNameA()가이를 수행하지 않습니다.

설정에 대해서는 http://technet.microsoft.com/en-us/library/cc781607%28WS.10%29.aspx을 참조하십시오. 이 사건이 소홀히 타당하다고 여기는 일치가 있습니다 (아래 참조).

감사합니다.이 게시물에 대한 기여.

+0

짧은 경로 LPWSTR도 아닌가요? 아마도 OP는 WideCharToMultiByte와 같은 것을 찾고 있습니까? –

+0

나는 실제로 그 두 가지의 조합을 찾고 있습니다. – metafex

+0

@metafex : 아마도 질문을 편집해야 할 것입니다. 이것은 받아 들여진 응답인데, 그것이 현재 무엇인가되는 질문과 함께 의미가없는 것처럼 보입니다. –

관련 문제