2012-10-24 3 views
0

이 코드가 아무 것도 출력하지 않는 이유는 무엇입니까? (exept info word)? 파일이 존재합니다.ReadFile()을 사용하는 간단한 읽기 파일

hReadFile = CreateFile(L"indexing.xml",GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ |FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    wchar_t *wchr = new wchar_t[20]; 
    DWORD dw; 
    ReadFile(hReadFile, wchr, sizeof(wchar_t) * 5, &dw, NULL); 
    CloseHandle(hReadFile); 
    wchr[dw/sizeof(wchar_t)] = L'\0'; 
    std::wcout << L"info " << wchr << L"  " << dw << std::endl; 
+1

시작하려면 읽은 문자열을 종료하지 마십시오. –

+0

@Joachim Pileborg ReadFile이 데이터 읽기를 자동 종료하지 않습니까? – abilash

+0

@JoachimPileborg : 결과는 가비지 다음에 나오는 문자열이됩니다. – Andrey

답변

2

유니 코드 파일은 선택 사항 인 Byte Order Mark (BOM)으로 시작될 수 있습니다.

UTF-16의 경우 BOM은 해당 파일에서 어떤 엔디안이 사용되는지 알려줍니다.

또한 BOM을 사용하여 다른 유니 코드 인코딩을 구분할 수 있습니다.

OP의 예제 파일은 2 바이트 크기의 wchar_t 유형화 된 배열로 포인터를 늘리면 건너 뛰고 데이터를 인쇄 할 수 있으므로 분명히 처음 2 바이트만큼 BOM을 전달합니다.

std::wcout << L"info " << (wchr+1) << L" " << dw << std::endl;