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

Задача : сохранить несколько чисел в файле и потом их прочитать - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что почитать о STL? http://www.cyberforum.ru/cpp-beginners/thread462073.html
Я вот видел MFC верхом (почти) совершенства, только иногда писал свои классы для деревьев там. А тут на тебе! Говорите быстро, с чем его едят
C++ Где открыть СТМ? Где его отрыть-то? http://www.cyberforum.ru/cpp-beginners/thread462072.html
Как сделать нормальную инсталяшку для программы? C++
Как сделать нормальную инсталяшку для программы, расскажите плз! Чтобы в ODBC прописывала базу данных и всякие OLEAUT32.dll пуляла в SYSTEM. Или хотябы ссылку дайте.
C++ Есть ли ограничения на количество элементов управления в окне диалога?
Здравствуйте! Подскажите,пожалуйста,есть ли ограничение на количество элементов управления в окне диалога. Очень нужно напихать туда кучу контролов (порядка триста). В определённый момент редактор отказывается вставлять очередной контрол. Кто знает,в чём проблема? В MSDN по этому поводу ничего не нашёл. Если есть ограничение,то как его обойти. Спасибо!
C++ Где в инете найти Кнут в e-виде? http://www.cyberforum.ru/cpp-beginners/thread462050.html
Может кто подскажет: есть ли где в инете Кнут в e-виде? Заранее благодарен...
C++ Как использовать экземпляры классов МFC? Такая проблема: С помощью MFC AppWizard создал проект, в котором редактируется некая древо-структура. Есть класс СMyDoc, который сохраняет нужную структуру данных: struct Tree { int linkTo; int linkFrom; int linksTo; int linksFrom; CString name; подробнее

Показать сообщение отдельно
Brother
Сообщений: n/a

Задача : сохранить несколько чисел в файле и потом их прочитать - C++

02.11.2007, 22:34. Просмотров 1595. Ответов 1
Метки (Все метки)

Задача : сохранить несколько чисел в файле (ну детский сад!) и потом их прочитать...
Грабли начинаются с записи. Хотим писать в двоичном формате (т.е. не 'букивками'
Читаем в msdn про конструктор fstream (их несколько, но я цитирую только то, что по теме)
'
fstream( const char* szName, int nMode, int nProt = filebuf::openprot );
[...]
nMode
An integer that contains mode bits defined as ios enumerators that can be combined with the bitwise OR ( | ) operator. The nMode parameter must have one of the following values:
[...]
ios::binary Opens the file in binary mode (the default is text mode).
[...]
'
Рулезь, пишем следующий код :
#include 'stdafx.h'
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
fstream FileStream('data.bin', ios::out | ios::trunc | ios::binary);
int x = 1;
FileStream << x;
return 0;
}
Компилируем (VC6), радуемся, что без ошибок, запущаем... Разочаровываемся... Вместо двоичной записи получаем откровенный ASCII файл длинной в 1 байт, бесстыже хранящий 0x31...
Ладно.. Лезем в msdn, ищем другие пути... Находим статью 'Binary Output Files' где для нас пишут
'
Construct a stream as usual, then use the setmode member function, which changes the mode after the file is opened:
ofstream ofs ( 'test.dat' );
ofs.setmode( filebuf::binary );
ofs.write( char*iarray, 4 ); // Exactly 4 bytes written
'
Ну вааще хорошо! Быренько пишем
#include 'stdafx.h'
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
fstream FileStream('data.bin', ios::out | ios::trunc);
FileStream.setmode(filebuf::binary);
int x = 1;
FileStream << x;
return 0;
}
...при компиляции получаем сообщение об ошибке
error C2039: 'setmode' : is not a member of 'basic_fstream<char,struct std::char_traits<char> >
...то бишь нема такого метода в fstream (который и есть typedef basic_fstream<char,struct std::char_traits<char> >)
хотя в msdn довольно ясно пишуть
'fstream::setmode
int setmode( int nMode = filebuf::text );
Sets the binary/text mode of the stream’s filebuf object. It can be called only after the file is opened.' ...и далее по тексту...
В чем же грабли? 'Пойти мне болото, наесться лягушат?'
(Нет, конечно же нашелся метод решить поставленную задачу заюзанием одновременно в конструкторе ios::binary и записи в файл посредством fstream::write, но все же таки очень интересует вопрос, почему как-то по-левому работает operator<<, не взирая на наше стремление к бинарности, и куда девался setmode из fstream...)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru