Форум программистов, компьютерный форум CyberForum.ru

Вывод wstring в файл - C++

Восстановить пароль Регистрация
 
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
20.07.2014, 10:23     Вывод wstring в файл #1
C++
1
2
3
4
5
6
7
8
9
10
11
bool addCategory(const std::wstring& name_category)
{
wfstream fio = initAndCheckWFSTREAM(FILENAME_CATEGORY, ios_base::app | ios_base::out); 
// инициализация fio (своя функция с некоторыми особенностями)
 
if (isFileEmpty(FILENAME_CATEGORY))
fio << "[Список категорий]:\n";
 
fio << name_category << "\n"; 
return true;
}
Оператор fio << name_category << "\n" не выполняется, соответственно никакого вывода нет и fio.fail присваивается true. В чем проблема, можно было бы грешить если бы я не создал wstring, wfstream, но по смыслу вроде бы все правильно. Подскажите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2014, 10:23     Вывод wstring в файл
Посмотрите здесь:

C++ Wstring и файловый поток
C++ Запись и чтение из файла wstring
Странное поведение wstring C++
C++ Конвертирование в wstring&
wstring to int с делемиттером C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.07.2014, 10:40     Вывод wstring в файл #2
Что за initAndCheckWFSTREAM?
В каком состоянии fio.good() после его вызова?
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
20.07.2014, 11:20  [ТС]     Вывод wstring в файл #3
Tulosba,

C++
1
2
3
4
5
6
7
inline wfstream initAndCheckWFSTREAM(const std::wstring &filename,
std::ios_base::openmode mode = ios_base::app)
{
    wfstream f(filename, mode);
    if (!f.is_open()) throw FileNotOpened(filename);
    return f;
}
После вызова функции initAndCheckWFSTREAM fin.good() == true, после попытки вывода name_category fin.good() == false;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.07.2014, 11:39     Вывод wstring в файл #4
А если закоментировать строки:
C++
1
2
if (isFileEmpty(FILENAME_CATEGORY))
fio << "[Список категорий]:\n";
что-то изменится?
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
20.07.2014, 11:49  [ТС]     Вывод wstring в файл #5
Tulosba, ничего не изменилось.
Эта проблема только с русскими символами. С ASCII символами все работает как надо.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.07.2014, 11:56     Вывод wstring в файл #6
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Эта проблема только с русскими символами. С ASCII символами все работает как надо.
Ну а если заменить fio на std::wcout вывод на консоль будет? Убрав, конечно, все открытия и проверку на пустоту.
P.S. для строковых литератов добавьте L в начале. Т.е. :
C++
1
fio << L"[Список категорий]:\n";
где есть вывод.
CHELOVEKPAUK
 Аватар для CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
20.07.2014, 14:37  [ТС]     Вывод wstring в файл #7
Tulosba,
C++
1
2
setlocale(0, "rus");
std::wcout << L"абвгд";
Вот так выводит в консоль, без локали не выводит ничего, точно такая же ситуация как с выводом в файл.

Добавлено через 2 часа 33 минуты
Нашел кое что интересное:

C++
1
2
3
wofstream b("zzz.txt", ios_base::app);
    b.imbue(locale("rus_rus.1251"));
    b << a;
вот так вывод работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2014, 17:01     Вывод wstring в файл
Еще ссылки по теме:

C++ Из string в wstring
Из wchar_t* в wstring или в string C++
C++ Объясните, что означает wstring input = L""; и wstring output = L""; ?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2014, 17:01     Вывод wstring в файл #8
Как вывести в файл строку wstring с кириллицей???
Yandex
Объявления
20.07.2014, 17:01     Вывод wstring в файл
Ответ Создать тему
Опции темы

Текущее время: 14:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru