// так читаю из файла
void run(const TCHAR* filename){
std::basic_string<TCHAR> tmp;
std::basic_ifstream<TCHAR> input(filename);
while(input >> tmp){
if(foo(tmp))output.insert(tmp);
}
}
Файловые потоки С++ и UNICODE
Читаю строки из файла в std::basic_string<TCHAR> с помощью std::basic_ifstream<TCHAR>, строки передаю в ListBox. Но basic_ifstream<TCHAR> корректно чтает только ASCII файлы (т.е. с однобайтовыми символами), а из UNICODE файлов получаются “кракозябры”. Похоже, что из файла считывается байт и присваиваются младшему байту wchar_t, а старший байт просто заполняется нулями, (хотя я надеялся, что специализация потока для wchar_t будет читать по два байта). Как прочитать UNICODE файл?
Код:
Код:
// так добавляю в listbox
void start(HWND hWnd){
// ...
SendMessage(hList, LB_RESETCONTENT, 0, 0);
std::set<std::basic_string<TCHAR>>::iterator p = output.begin();
while(p != output.end()){
SendMessage(hList, LB_ADDSTRING, 0,(LPARAM)(*p).c_str());
++p;
}
}
void start(HWND hWnd){
// ...
SendMessage(hList, LB_RESETCONTENT, 0, 0);
std::set<std::basic_string<TCHAR>>::iterator p = output.begin();
while(p != output.end()){
SendMessage(hList, LB_ADDSTRING, 0,(LPARAM)(*p).c_str());
++p;
}
}