Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Файловые потоки С++ и UNICODE

394
26 июня 2008 года
MegaMozg
317 / / 18.03.2006
Программа на WinAPI, UNICODE включен, т.е TCHAR есть wchar_t.
Читаю строки из файла в std::basic_string<TCHAR> с помощью std::basic_ifstream<TCHAR>, строки передаю в ListBox. Но basic_ifstream<TCHAR> корректно чтает только ASCII файлы (т.е. с однобайтовыми символами), а из UNICODE файлов получаются “кракозябры”. Похоже, что из файла считывается байт и присваиваются младшему байту wchar_t, а старший байт просто заполняется нулями, (хотя я надеялся, что специализация потока для wchar_t будет читать по два байта). Как прочитать UNICODE файл?


Код:
// так читаю из файла
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);
    }
   
}


Код:
// так добавляю в 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;
    }
   
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог