2010-05-29 4 views
0

Windows의 폴더에서 파일을 읽는 데 folowing 코드를 사용하고 있습니다. 그러나이 MFC 응용 프로그램에서 유니 코드로 char 배열을 변환해야합니다. 예를 들어 아래 코드와 같이 경로를 "C : \ images3 \ test \"로 하드 코딩하면 코드가 작동합니다.MFC C++에서 유니 코드로 문자 배열을 변환


char* pathOfFileType; 
hFind = FindFirstFile(_T(pathOfFileType), &FindFileData); 

사람이 어떻게이 문제를 해결하는 방법을 말해 줄래 다음과 같이 내가 원하는 무엇


WIN32_FIND_DATA FindFileData; 
HANDLE hFind = INVALID_HANDLE_VALUE; 
hFind = FindFirstFile(_T("C:\\images3\\test\\"), &FindFileData); 

이 작업을 얻을 수 있습니다?
감사

답변

1

답장을 보내 주셔서 감사합니다. 나는 그 밑에 무슨 일이 일어나고 있는지에 대해 많은 생각을 갖지 않았기 때문에 그 대답들로부터 많은 것을 배웠다. 한편 나는 기존 코드를 최소한으로 변경하여 다음 코드를 사용하여 UNICODE로 간단하게 변환하여이 문제를 해결할 수있었습니다.

#include <atlconv.h> 

USES_CONVERSION; 

//An ANSI string 
LPSTR lpsz_ANSI_String = pathOfFileType; 

//ANSI string being converted to a UNICODE string 
LPWSTR lpUnicodeStr = A2W(lpsz_ANSI_String); 

hFind = FindFirstFile(lpUnicodeStr, &FindFileData); 
+0

변환을 수행하기 위해 CString을 사용할 수도 있습니다.이 함수는 여러 가지 편리한 변환 함수를 제공하며 일반적으로 MFC (또는 ATL)를 사용하는 경우에 사용하는 것이 좋습니다. –

0

당신은 UTF-16 char들에서 문자열을 변환 할 MultiByteToWideChar 기능을 사용할 수 있지만 거라고 더 나은 당신이 그것을 가지고 어디든지 사용자 또는에서 유니 코드로 직접 pathOfFileType를 얻기 위해, 그렇지 않으면 당신은 아직 할 수있다 현재 CP에 포함되지 않은 문자가 포함 된 경로에 문제가 발생합니다.

0

그리 "나는 유니 코드 문자 배열을 변환이 이것을 MFC 응용 프로그램 때문에". 원하는 경우 변경을 사용하여 멀티 바이트 문자 세트를 사용할 수 있습니다. 프로젝트 속성에서

는 일반적으로 변경 문자는이 당신이 2 바이트 유니 코드 (비주얼 스튜디오의 이름을 사용하고자하는 가정하면

char* pathOfFileType; 
hFind = FindFirstFile(pathOfFileType, &FindFileData); 

작동합니다 '를 사용하여 멀티 바이트 문자 집합'이제

로 설정 윈도우 네이티브 유니 코드 문자)의 인코딩 당신은 명시 적으로 귀하의 질문의 혼란을 보여줍니다

char* pathOfFileType; 
hFind = FindFirstFileA(pathOfFileType, &FindFileData); 
+0

-1 멀티 바이트 문자 세트를 사용하면 _ UTF-8이 아닌 암시가됩니다. 즉, 유니 코드가 아닌 프로그램의 코드 페이지에 대해 사용자가 설정 한 코드 페이지를 사용하는 것입니다. –

+0

@Logan Capaldo 좋은 지적. WINAPI가 변환 후 보일 수정 된 답변 – ravenspoint

+0

-1이 제거되었습니다. 이전보다 위험한 부정확 한 단어에 불과했습니다. –

0

는 API의 MBCS 버전을 호출해야 몇 가지 문제. 첫째, MFC를 사용한다고해서 문자 배열을 유니 코드로 변환해야한다는 것을 의미하지는 않습니다. 다른 배열과는 아무런 관련이 없습니다. 또한 FindFirstFile은 MFC 함수가 아닌 Win32 API입니다. Finaly, _T("abc")은 반드시 유니 코드 일 필요는 없습니다. 대신 _T(X)은 멀티 바이트 빌드에서 X으로 확장되고 유니 코드 빌드에서는 L X으로 확장되어 와이드 문자 리터럴을 만드는 매크로입니다. 이는 코드가 비 코드 또는 다중 바이트 구성으로 컴파일 될 수 있도록 설계되었습니다. 변수를 선언 할 때 동일한 유연성을 얻으려면 char 또는 wchar_t 대신 TCHAR 유형을 사용하십시오. 그래서 두 번째 조각은 단지 문자열 리터럴이 아닌 식별자에 적용,

TCHAR* pathOfFileType; 
hFind = FindFirstFile(pathOfFileType, &FindFileData); 

주처럼 더 _T 매크로를 봐해야합니다.