Здравствуйте, Fedor Sumkin, Вы писали:
FS>Да, данный способ верен для POD-типов и хорош тем что не надо задумываться о внутреннем устройстве структуры/класса — единственное, что нужно использовать — массивы вместо указателей. Также, его можно легко расширить, добавив дополнительные данные в структуру и ничего не поломается(если нет необходимости в поддержке совместимости со старыми форматами файлов где хранится информация). В рамках поставленной задачи — самое разумное решение в 30-50 строк. Ну и что, что файл может стать большим — чем-то приходится жертвовать.
FS>Раз кто-то усомнился в том что так можно(а минусов-то понаставили ) — привожу полный код решения.
vector <Person> pers;
pers.push_back(Person);
ofstream out ("E:\\file1.txt", ios::binary);
int size = pers.size();
out.write((char*)(&size), 4);
out.write((char*)&pers[0], pers.size()*sizeof(Person));
out.close();}
Вот в pers.push_back(Person); что именно из елементов нужно писать?...Чтобы весь класс сохранить в нем.
Здравствуйте, Fedor Sumkin, Вы писали:
FS>Да, данный способ верен для POD-типов и хорош тем что не надо задумываться о внутреннем устройстве структуры/класса — единственное, что нужно использовать — массивы вместо указателей. Также, его можно легко расширить, добавив дополнительные данные в структуру и ничего не поломается(если нет необходимости в поддержке совместимости со старыми форматами файлов где хранится информация). В рамках поставленной задачи — самое разумное решение в 30-50 строк. Ну и что, что файл может стать большим — чем-то приходится жертвовать.
FS>Раз кто-то усомнился в том что так можно(а минусов-то понаставили ) — привожу полный код решения.
Здравствуйте, BulatZiganshin, Вы писали:
BZ>он говорит о POD записи, ты не знаешь что это такое?
Знаю, первоначальные условия ничего не говорят о PODе, нет даже намека на это, ПОД зачем-то затащили уже потом, следующим шагом будет появление sqlite.
Здравствуйте, Usefur, Вы писали:
U>Уважаемые, прошу вашей помощи. Меня интересует вопрос как записать данные из вектора (в моем случае "vector <Person> pers") данные в файл, чтобы потом их можно было считать. В векторе хранятся только данные о Имени, Фамилии, Дате рождения, Телефоне. Ну и нужно их сохранять, чтобы при каждом запуске программы не вводить всю информацию заново.
Думаю, для лабораторки проще сделать текстовый файл
В классе Person создай методы
bool Write(FILE *);
bool Read(FILE *);
Для записи, иди по списку и для каждого Person вызывай Write.
Для чтения, создавай Person, вызывай Read, добавляй Person список. Читай файл до тех пор, пока feof() ноль возвращает.
BFE>>А потом уйдут многие часы на борьбу с ошибками Boost.serialization. B>можно пример ошибки? здесь
Обратите внимание на длину обсуждения, длительность, результативность и т.п. Кроме того есть соответствующие обсуждения в блоге разработчиков. Для себя сделали вывод — boost::serialization является фактически не поддерживаемой и прекратили ее использование в проекте (как раз шла модернизация...)
Boost по своей природе не является брендом, который гарантирует хоть какое-то сопровождение. У него просто нет механизмов для поддержки, кроме доброй воли авторов. Поэтому надо всегда смотреть на каждую отдельную библиотеку из boost и принимать решение об ее использовании независимо. boost как бренд гарантирует только определенное качество продукта и качество проектных решений.
Здравствуйте, Serg27, Вы писали:
S>... S>Для себя сделали вывод — boost::serialization является фактически не поддерживаемой и прекратили ее использование в проекте (как раз шла модернизация...)
Отсутствие обратной совместимости — все-таки, ошибка дизайна, с ней бороться бесполезно, можно только отказаться от использования библиотеки.
К тому же, не всем критична обратная совместимость.
Мы при выходе новой версии можем оперативно перетащить все сервера и клиенты, это разовый и нечастый гемор. В остальном же boost.serialization всем устраивает.
Здравствуйте, Usefur, Вы писали:
U>>ну а потом подумай как тебе удобно упаковать данные в блоки чтоб их потом оттуда можно было однозначно вычитать.
U>Е нет...на курсовую(которую мне послезавтра сдавать))
Товарищу майору сдадите.
(когда будут отпускать в увольнение, подучи все же С++, пригодится )
Здравствуйте, okman, Вы писали:
O>Здравствуйте, Serg27, Вы писали:
S>>... S>>Для себя сделали вывод — boost::serialization является фактически не поддерживаемой и прекратили ее использование в проекте (как раз шла модернизация...)
O>Любопытства ради — что использовали взамен ?
Так как фактически сериализовались объекты, которые описывали конфигурацию, то был произведен переход на json. Массовое использование boost::serialization для собственно данных было прекращено раньше по другим причинам (т.е. не связанным собственно с boost::serialization).
У меня до сих пор довольно хорошее впечатление о boost::serialization, но использовать его в производствнном коде нельзя из-за проблем сопровождения (это ж надо было порушить обратную совместимость бинарных архивов).