Форум программистов, компьютерный форум, киберфорум Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 28.06.2015
Сообщений: 9
1

Чтение из файла MFC

28.06.2015, 12:08. Показов 1955. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, пишу на с++ с использованием MFC. Читаю из файла с помощью CStdioFile. Строку записываю TCHAR. Проблема в том,что вместо русских символов получаются "иероглифы".
То есть строка из файла:
<system id="10" type="1K" element="10" obj="УКЦ1:INOM1" name="Неисправен" place=""></system>
прочитывается как:
<system id="10" type="1K" element="10" obj="УКЦ1:IN OM1" name="Неи&#2 09;Ð¿Ñ€Ð°&#208 ;²ÐµÐ½" place=""></system>

Вот фрагмент кода:
C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
TCHAR buff[200]; 
CString buffstr;
CStdioFile OpenFile;
if (OpenFile.Open (path, CFile::modeRead, &error))
    {
        do 
        {
            i++;
            OpenFile.ReadString (buff,200);
            buffstr.Format(_T("%s"),buff);
                        ...
                 }
         }
Помогите исправить))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2015, 12:08
Ответы с готовыми решениями:

Чтение файла в MFC
Есть текстовый файл TConfiguration.txt. В нем следующая информация UID=2806FA4F01000066=1 ...

Чтение бинарного файла в MFC
Доброго времени суток всем! Подскажите, что-то впадаю в ступор. Есть бинарный файл: Задача,...

Чтение из файла в строку (в MFC)
Всем привет! Есть две строки, в которые вводятся значения (два числа которые надо сложить) и...

Чтение из файла и создание объектов MFC
Rect MyRect; CPaintDC dc(this); char buff; int x1,x2,x3,x4,i=1; ifstream f(&quot;E\\data.txt&quot;);...

3
шКодер самоучка
2281 / 1957 / 945
Регистрация: 09.10.2013
Сообщений: 4,357
Записей в блоге: 7
28.06.2015, 12:26 2
DenisMA, у вас файл в UTF-8
смотрите в сторону функции mbstows

Добавлено через 4 минуты
ЗЫ: массив чаров не нужен, можно считывать сразу в CString
C++Выделить код
1
OpenFile.ReadString(buffstr);
см CStdioFile::ReadString
0
0 / 0 / 0
Регистрация: 28.06.2015
Сообщений: 9
28.06.2015, 13:59  [ТС] 3
Спасибо, с TCHAR разобрался
По поводу функции mbstowcs:
size_t mbstowcs (wchar_t* dest, const char* src, size_t max);

Параметры:
dest
Pointer to an array of wchar_t elements long enough to contain the resulting sequence (at most, max wide characters).
src
C-string with the multibyte characters to be interpreted.
The multibyte sequence shall begin in the initial shift state.
max
Maximum number of wchar_t characters to write to dest.
size_t is an unsigned integral type.
Я так понял,что в качестве второго параметра можно указывать CString. Указываю, но он ругатся
error C2664: mbstowcs: невозможно преобразовать параметр 2 из 'CString' в 'const char *' c:\users\dsmoskvinuser\desktop\old\infoiom\infoiom\infoiomdlg.cpp

C++Выделить код
1
2
3
4
5
wchar_t *wchar_t_out;  // записываем в wchar_t_out
CString buffstr;            // считываем с buffstr
 
...
mbstowcs (wchar_t_out,buffstr,buffstr.GetLength ());
в чем сейчас у меня проблема ?

Добавлено через 26 минут
Cra3y,
Спасибо, с TCHAR разобрался
По поводу функции mbstowcs:
size_t mbstowcs (wchar_t* dest, const char* src, size_t max);

Параметры:
dest
Pointer to an array of wchar_t elements long enough to contain the resulting sequence (at most, max wide characters).
src
C-string with the multibyte characters to be interpreted.
The multibyte sequence shall begin in the initial shift state.
max
Maximum number of wchar_t characters to write to dest.
size_t is an unsigned integral type.
Я так понял,что в качестве второго параметра можно указывать CString. Указываю, но он ругатся
error C2664: mbstowcs: невозможно преобразовать параметр 2 из 'CString' в 'const char *' c:\users\dsmoskvinuser\desktop\old\infoiom\infoiom\infoiomdlg.cpp


C++Выделить код
1
2
3
4
5
wchar_t *wchar_t_out;  // записываем в wchar_t_out
CString buffstr;            // считываем с buffstr
 
...
mbstowcs (wchar_t_out,buffstr,buffstr.GetLength ());
в чем сейчас у меня проблема ?
0
шКодер самоучка
2281 / 1957 / 945
Регистрация: 09.10.2013
Сообщений: 4,357
Записей в блоге: 7
28.06.2015, 14:42 4
Цитата Сообщение от DenisMA Посмотреть сообщение
Я так понял,что в качестве второго параметра можно указывать CString
нет, там нужен как раз массив из wchar_t
используется эта функция примерно так:
C++Выделить код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <memory>
#include <string>
 
std::wstring to_wstring(const char* str) {
    std::unique_ptr<wchar_t[]> tmp = nullptr; // для автоматического освобождения памяти
    size_t sz, len;
    len = mbstowcs(nullptr, str, 0); // получаем длину строки
    sz = len + 1;
    tmp.reset(new wchar_t[sz]); // выделяем память
    mbstowcs(tmp.get(), str, sz); // конвертируем
    return std::wstring(tmp.get());
}
std::wstring to_wstring(const std::string& str) {
    return to_wstring(str.c_str());
}
как преобразовать std::wstring/string <-> CString я не в курсе, не приходилось этим заниматься
0
28.06.2015, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2015, 14:42
Помогаю со студенческими работами здесь

MFC Чтение из файла в Lst Box
Доброе время суток. Мне нужно записать содержимое файла в List Box. Подскажите как. Спасибо. ...

Чтение и запись в файл .bin (MFC)
Использую стандартные диалоги, но при сохранение файла .bin он весит 4 бита, то бишь там пусто и...

MFC Как организовать чтение-поиск-запись в файл?
Смысл таков - есть маленькая игра с 2 пользователями. Требуется сохранять рекорды в...

Чтение .txt построчно в MFC
Добрый день уважаемые форумчане! Второй день уже мучаюсь - не могу понять, как считать строку из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru