Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 10:19   #1
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию Запись в бинарный файл структур средствами C++

Я уверен подобные темы уже обсуждались на форуме, но среди найденых мною, я не нашел нужного ответа.
Можно ли запилить в бинарник средствами С++ и считать из него, например, вот такую структуру:
Код:
struct SOME
{
    int x;
    long y;
}
Как это сделать с помощью Сишных функций fwrite() и fread() я знаю.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 03.03.2012, 13:21   #2
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Возьми скачай Дейтел 5-ое издание, или напиши почту вышлю, открывай раздел №17, пункт 17.7 почитай, я по этому разбирался, если что пиши, отвечу.
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 03.03.2012, 13:21   #3
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Можно ли запилить в бинарник средствами С++ и считать из него, например, вот такую структуру:
Можно
Код:
// write to file
	std::fstream fin("L:\\str", std::ios::out|std::ios::binary);
	SOME x;
	//Инициализация х
	fin.write((char *)&x, sizeof(SOME));
	fin.close();

//read from file
	std::fstream fout("L:\\str", std::ios::in|std::ios::binary);
	SOME y;
	fout.read((char *)&y, sizeof(SOME));
	fout.close();
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 03.03.2012, 13:26   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
{
    std::ostream out("test",ios::out & ios::binary);
    SOME s;
    out.write(reinterpret_cast<char*>(&s),sizeof(s));
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.03.2012, 13:36   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Пепел Феникса
Цитата:
out.write(reinterpret_cast<char*>(& s),sizeof(s));
2Sam Gold
Цитата:
fin.write((char *)&x, sizeof(SOME));
fout.read((char *)&y, sizeof(SOME));
нельзя так делать
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.03.2012, 13:40   #6
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
нельзя так делать
Почему ?........
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 03.03.2012, 13:47   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почему нельзя, и как надо?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.03.2012, 14:36   #8
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Можно еще так:

Код:
struct SOME
{
    int x;
    long y;
};

FILE* file;
SOME strc;

fopen_s(&file, "data.dat", "rb");
fread(&strc, sizeof(SOME), 1, file);
............
fopen_s(&file, "data.dat", "wb");
strc.x = 100;
strc.y = 90;
fwrite(&strc, sizeof(SOME), 1, file);
crymchanin вне форума Ответить с цитированием
Старый 03.03.2012, 15:06   #9
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
нельзя так делать
Я пробовал так сделать. Не получилось, поэтому и тему запостил. Так что pproger прав.
Цитата:
Возьми скачай Дейтел 5-ое издание, или напиши почту вышлю, открывай раздел №17, пункт 17.7 почитай, я по этому разбирался, если что пиши, отвечу.
Я на личку выслал вам свою почту.



Добавил позже:
Код:
{
    std::ostream out("test",ios::out & ios::binary);
    SOME s;
    out.write(reinterpret_cast<char*>(&s),sizeof(s));
}
Просто ради интереса проверил. И заработало блин. Не знаю в чем дело, может в том что я использовал преобразование ссылок в стиле Си ( (char*) ). Поставил reinterpret_cast и заработало. Так что Пепел Феникса прав. Спасибо.
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 03.03.2012 в 15:20.
MooNDeaR вне форума Ответить с цитированием
Старый 03.03.2012, 15:23   #10
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Не знаю в чем дело, может в том что я использовал преобразование ссылок в стиле Си ( (char*) )
вряд -ли. Приведенный мной вариант рабочий - проверил у себя.
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись структуры в бинарный файл. jack291 Помощь студентам 2 20.08.2011 18:07
запись в бинарный файл Shepard90 Общие вопросы C/C++ 2 28.06.2011 08:59
с++ запись в бинарный файл ofstream::write Farrel Общие вопросы C/C++ 1 25.11.2010 00:19
Считывание и запись структур в бинарный файл TheKnyazz Общие вопросы C/C++ 7 10.11.2009 13:47
запись классов в бинарный файл Feannewedd Общие вопросы C/C++ 6 29.06.2009 10:11