2014-12-25 4 views
0

MoveFile 함수를 사용하고 싶습니다.이 함수는 두 개의 LPWSTR 인수를 사용하지만 char * 및 LWSTR이 한 개 있습니다. 어떻게 연결합니까? 그냥 해명char *와 LPWSTR 문자열을 연결하는 방법은 무엇입니까?

//move file 
    LPWSTR latestFile = L"test.SPL"; 
    char* spoolFolder = "C:\\Windows\\System32\\spool\PRINTERS\\"; 
    LPWSTR fileToMove = spoolFolder + latestFile; 
    BOOL moved = MoveFile(latestFile, L"C:\\UnprocessedFiles\\" + latestFile); 
+0

나머지 모든 것 외에도 여기에 더 근본적인 문제가 있습니다. 항상 스풀 폴더가 그 위치에 있다는 것에 의존 할 수 없습니다. 우선 Windows 디렉터리가 다른 드라이브에있을 수 있습니다. –

답변

1
std::wstring latestFile = wstring("test.SPL"); 
std::wstring spoolFolder = wstring("C:\\Windows\\System32\\spool\PRINTERS\\"); 
std::wstring fileToMove = spoolFolder + latestFile; 
BOOL moved = MoveFile(latestFile.c_str(), fileToMove.c_str()); 

위의 경우 LPWSTR은 w_char *의 typdef입니다. 당신은 MSDN을 참조하는 경우 그래서 당신은 그것을 볼 수 있습니다 :

여기
typded wchar_t* LPWSTR; 

w_char * 당신의 문자열이 유니 코드 ANSI하지 체계로 인코딩되는 것을 의미합니다. 따라서 창 아래에서 UNICODE 문자열은 UTF16 (각 문자 당 2 바이트)이됩니다.

std :: wstring도 std :: basic_string <wchar_t,char_traits<>>의 typedef이므로 입력을 wstring으로 선언하고 wasting.c_str()을 호출하면이 작업이 수행됩니다.

+0

이 코드 줄이 OP 질문을 해결하는 이유를 설명하는 것이 좋습니다. –

+0

@ruffp ok 내 대답을 업데이트했습니다 –

+1

std :: wstring ("test.SPL") **은 ** 작동하지 않습니다. 사실, 해당 생성자는 표준 라이브러리에 존재하지 않습니다. 아마 당신은'std :: wstring (std :: begin (myStr), std :: end (myStr));'을 사용하거나 간단히 문자열 리터럴 앞에'L'을 넣기를 원할 것입니다. 또한, 당신은'std' 접두어를 사용함에있어 일관성이 없으며 두번째 문자열에서 백 슬래시를 벗어나는 것을 잊었습니다. 어쩌면 마지막 문제를 피하기 위해 원시 문자열의 사용을 언급하는 것이 유용 할 것입니다. – bogdan

2

는 LPWSTR은 wchar_t*에 대한 형식 정의입니다. wcscat_s을 사용하여이 양식의 문자열을 조합 할 수 있습니다. 하나의 char* 문자열은 단순한 리터럴 (리터럴 앞에 L으로 접두사를 붙이고 선언 된 유형을 변경하기 만하면 됨)이 있으므로 동일한 유형으로 변경해야합니다. 그러나이 태그를 C++로 태그 지정 했으므로 std::wstring 클래스를 사용하면이 모든 것을보다 간단하게 수행 할 수 있습니다.