Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Класс FILE


Автор: ArnoldRich 13.12.2013, 07:36
Как используя класс FILE записать в текстовый файл с кодировкой MS-DOS 866 ?
Или использовать другой класс?

 CString text;
 CString file_name;

 text = "Этот текст должен быть записан в кодировке MS-DOS 866 в текстовый файл.";
 file_name = "MyFile.txt";

 FILE *fp;
 fp = fopen(file_name, "w+");
 fprintf(fp, text + "\n");
 fclose(fp);
 

Автор: feodorv 13.12.2013, 08:02
Цитата(ArnoldRich @  13.12.2013,  08:36 Найти цитируемый пост)
fprintf(fp, text + "\n");

это компилируется? В любом случае правильный вывод с помощью fprintf будет выглядеть вот так:
Код
fprintf( fp, "%s\n", text);
так как внутри text могут встретиться форматные символы % с непредсказуемым результатом.


Что касается основного вопроса: 
Цитата(ArnoldRich @  13.12.2013,  08:36 Найти цитируемый пост)
как записать в текстовый файл с кодировкой MS-DOS 866 ?

то нужно просто перевести текст в кодировку 866 (а можно и исходные тексты программы перевести в cp866, если другая кодировка не используется).

Добавлено позже
Цитата(ArnoldRich @  13.12.2013,  08:36 Найти цитируемый пост)
fprintf(fp, text + "\n");

это компилируется? В любом случае правильный вывод с помощью fprintf будет выглядеть вот так:
Код
fprintf( fp, "%s\n", text);
так как внутри text могут встретиться форматные символы % с непредсказуемым результатом.


Что касается основного вопроса: 
Цитата(ArnoldRich @  13.12.2013,  08:36 Найти цитируемый пост)
как записать в текстовый файл с кодировкой MS-DOS 866 ?

то нужно просто перевести текст в кодировку 866 (а можно и исходные тексты программы перевести в cp866, если другая кодировка не используется). 

Автор: ArnoldRich 17.12.2013, 07:03
Цитата(ArnoldRich @ 13.12.2013,  07:36)
Как используя класс FILE записать в текстовый файл с кодировкой MS-DOS 866 ?
Или использовать другой класс?

 CString text;
 CString file_name;

 text = "Этот текст должен быть записан в кодировке MS-DOS 866 в текстовый файл.";
 file_name = "MyFile.txt";

 FILE *fp;
 fp = fopen(file_name, "w+");
 fprintf(fp, text + "\n");
 fclose(fp);

CharToOem

Автор: Earnest 19.12.2013, 14:04
Строго говоря, общее решение - это преобразование через Юникод. Т.е. сначала MultiByteToWideChar, затем WideCharToMultiByte, в каждом случае указывая нужную кодовую страницу. Если текущая кодовая страница OEM совпадает с 866, то можно использовать CharToOem.
Это если автор говорил о Windows

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)