Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CArchive сохранение текста(кирилица!) в файл 
:(
    Опции темы
rlinx
Дата 17.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Проблема возникает при попытке
сохранить текст (кириллица!): приложение сгенерировано с помощью App Wizard, я использую
созданный по умолчанию объект:
Код
 CArchive& ar 


в функции 
Код
 void  CMyDoc::Serialize(CArchive& ar).



 У меня есть переменная:
Код
CStringA str;



 в которой содержится текст "Старт".

дальше варианты:

Код
ar << str; // В файл перед текстом "Старт" вставляется символ (всегда разный), но сам текст пишется нормально.

ar.WriteString((CString)str); // то вместо текста |#@'_зябры (если - ar.WriteString(str); - то при компиляции выдает ошибку)
 

Подскажите где искать ошибку или решение

PM MAIL   Вверх
Rapalex
Дата 17.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Возникает вопрос: какого типа изначально переменная str и зачем её приводить к такому типу?

Приложение собирается как Unicode или нет?

так сложносказать но это не нормально. 


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 17.5.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Правильно и то, и другое:
Код

ar << str;
ar.WriteString(str);

Но только если у тебя формат строк соответствует приложению. А приложение у тебя явно UNICODE, тогда ты должен UNICODE-строки и использовать (а не CStringA).

Смотри, что получается:
WriteString принимает параметр LPCTSTR, это макрос, который в UNICODE-приложении равен  LPCWSTR. Конечно, CStringA не может преобразоваться в LPCWSTR, вот и ошибка. А когда ты пишешь (CString)str, ты преобразуешь строку в "широкую", вот она тебе и выводится.

Впереди записывается длина строки, а не "какой-то" символ, так что это нормально.
И вообще, архив пишется в бинарном формате, а не в текстовом.

 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.