2013-01-04 1 views
0

가능한 중복 : 나는 문자열이 UTF-16에
How to open an std::fstream (ofstream or ifstream) with a unicode filename?C++ UTF-16 ofstream 파일 생성 윈도우

을 인코딩하고 난 파일을 생성 할 위치 이름 파일은이 문자열이됩니다. 나는 시스템이 제대로 표시이 이름을보고 있는지 확인하려면 먼저

enter image description here

: 같은

UTF-16LE 문자열 보인다.

내가 시도 : 나는 적당한 이름을 얻을하지 않습니다

char *output=some address (points to memory where line is held) 
ofstream out(output); 
out.close(); 

출력에. 같은
는 것 같습니다 : 나는 UTF-16LE 마크를 추가 강조 표시된 파일의 작성을위한
enter image description here

하지 강조 파일은 원시 UTF-16 라인을 사용하여 만든 - 접근법 중 어느 것도 작동하지 않습니다.

WinApi (CreateFilew)없이 C++ 기능 만 사용하여 Windows에서 UTF-16LE 이름을 사용하여 파일을 만드는 몇 가지 방법이 있습니까?

내 컴파일러는 MinGW 4.0.4, 윈도우 XP입니다 (하지만 난 모든 Windows에서 작동 할) 어떤 조언 사전에

감사합니다!

+1

Windows에서 파일 시스템에 UTF-8을 사용한다고 생각하므로 문자열을 UTF-8로 변환해야 할 수도 있습니다. – peterph

+0

그들은 내가 잘못하지 않았다면 http://msdn.microsoft.com/en-us/library/windows/desktop/dd374081%28v=vs.85%29.aspx에 대해 UTF-16을 사용하도록 조언합니다. – Tebe

+0

Carl Norum, 문자열은 사전에 알 수 없기 때문에 거기에서 솔루션을 사용할 수 없습니다. http://i.imgur.com/zTtL8.png. 내 라인을 wchar_t line []으로 선언 할 수 없다. 크기는 임의 일 수있다 – Tebe

답변

0

모든 분들께 감사 드려요.하지만이 경우에는 C++ 스트림이 도움이되지 않습니다.

그래서 나는 WINAPI 사용 :

#ifndef WIN32 // for Linux 
    ofstream out(output); 
    out.close(); 
#else // for Windows 
    LPWSTR lp=(LPWSTR)output; 
    CreateFileW(lp,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | 
     FILE_SHARE_WRITE,  NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
    #endif 

를 그리고 정확한 이름의 출력 파일 가지고 : 다시

enter image description here

감사합니다!