Сохранение объекта в файл
Есть варианты как сохранить объекты типа TComponent, но как сохранить объект не относящийся к TComponent нету. Народ помогите !!!
Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно ???
Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно?
Пишите свои методы сохранения и загрузки, что не сложно.
Есть варианты как сохранить объекты типа TComponent, но как сохранить объект не относящийся к TComponent нету. Народ помогите !!!
Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно ???
[offtop]
ленивые, ленивые программисты, привыкшие к дотнету и прочим всемогущим библиотекам классов. программирование руками и головой уже не в моде!=\
[/offtop]
а руками слабо, да? перегрузку операторов ввода, вывода отменили? сериализация и прочие тоже не катит?(не знаю относительно билдера но вот в мфц такое дело было) профессиональная лень это хорошо, помогает писать более рациональный и простой код, но вот умственная лень, простите конечно, граничит с глупостью.
Я не знал реально ли сохранять объекты какой нибудь функцией или нет.
(ибо не вижу смысла писать своё когда есть уже и на много лучше).
Ладно судя по вашим словам такого нет, чтож понятно.
Тогда немного другой вопрос, как лучше сохранить объект в файл в виде текста или как указатель какой. Просто мой объект состоят из множество внутренних объектов заключённых в 4 вектора, в тех объектах тоже содержатся объекты из векторов и значений, ну и функций. КАк охранить всю инфу из этих объектов лучше?
(ибо в текстовом формета думаю это будет пипец как сложно и нериально, и вообще не понятно как отличать один вектор от другого в таком файле)
Пожалуйста помогите !!!
Например, для сохранения массива (строки и подобных вещей) перед ним можно записывать его длину, а после - все содержимое. При загрузке соответственно читаем длину и по ней - требуемое количество содержимого.
Proger_XP
Простейший вариант - сохраняем всё в бинарном виде и так же загружаем.
Например, для сохранения массива (строки и подобных вещей) перед ним можно записывать его длину, а после - все содержимое. При загрузке соответственно читаем длину и по ней - требуемое количество содержимого.
Мде жесть, ну чтож всё равно спасибо.
Если есть какие то ещё варианты, пишите плиз !!!
Тогда немного другой вопрос, как лучше сохранить объект в файл в виде текста или как указатель какой. Просто мой объект состоят из множество внутренних объектов заключённых в 4 вектора, в тех объектах тоже содержатся объекты из векторов и значений, ну и функций. КАк охранить всю инфу из этих объектов лучше?
(ибо в текстовом формета думаю это будет пипец как сложно и нериально, и вообще не понятно как отличать один вектор от другого в таком файле)
каждому из сохраняемых объектов присваиваешь уникальный идентификатор. допустим есть класс а, объект которого хранит у себя в нутряжки вектор объектов класса б, и есть где то там еще список объектов класса ц, которые содержат указатели на объекты класса б, которые хранятся в объекте класса а. следишь за мыслью? сохраняешь в файл, все равно какой, объект класса а, а вместе с ним и все объекты класса б хранящиеся у него. затем отдельно или в этот же файл сохраняешь объекты класса ц, но вместо указателей на объекты класса б сохраняешь идентификаторы. при восстановлении читаешь объект класса а, а вместе с ним и все объекты класса б принадлежащие ему. затем читаешь список объектов класса ц, читаешь идентификатор, ищешь в векторе объект с таким идом и восстанавливаешь указатель. коряво, но как то так.
Proger_XP, ну поэтому и указал, что не уверен!=)
Это, мягко говоря, будет сложнее, чем просто сохранять содержимое объекта в файл. Зато претендует на некоторую универсальность :)
Сложного тут ничего нет, это в основном механический код.
ну просто первая моя мысль: а как быть если есть указатели? указатели на функции и прочие? ведь не факт, что при простом сохранении объектов, они восстановятся и будут указывать куда надо, и даже совсем наоборот. если же иерархия простая, то да, можно и даже нужно просто механически сохранить объекты и не заморачиваться.:) решение зависит от конкретной структуры приложения.
ЗЫ: можно схитрить с идами, использовать вместо идов указатели, то бишь сохранять адреса объектов в памяти, а идом тогда будет указатель виз.:D
ЗЫЗЫ: относительно сериализации, примерно так, как я описал выше работает сериализация в C#, только за тебя это делает великий и могучий дотнет.
Artem_3A
каждому из сохраняемых объектов присваиваешь уникальный идентификатор. допустим есть класс а, объект которого хранит у себя в нутряжки вектор объектов класса б, и есть где то там еще список объектов класса ц, которые содержат указатели на объекты класса б, которые хранятся в объекте класса а. следишь за мыслью? сохраняешь в файл, все равно какой, объект класса а, а вместе с ним и все объекты класса б хранящиеся у него. затем отдельно или в этот же файл сохраняешь объекты класса ц, но вместо указателей на объекты класса б сохраняешь идентификаторы. при восстановлении читаешь объект класса а, а вместе с ним и все объекты класса б принадлежащие ему. затем читаешь список объектов класса ц, читаешь идентификатор, ищешь в векторе объект с таким идом и восстанавливаешь указатель. коряво, но как то так.
Очень интересный вариант. Единственное что не понятно что за уникальный идентификатор. И если можно небольшой примерчик структуры сохраняемого файла(не .bin конечно, а текстово). Просто так сложно структуру уловить и не понятно немного как записывать инфу(в каком порядке).
Сори за назойливость, просто с таким ещё не сталкивался(работал в основном в MS-DOS на старом билдере)
Да и уж если тема об это, найти конечно можно, но лучше спрошу, как лучше выводить файл? Думаю как в MS-DOS через fstream не очень.
идентификатор - допустим любое некоторое число, которое ставится в соответсвие единственному конкретному экземпляру класса.
имеем.
{
public:
...some method's...
private:
string str;
vector<B> list;
};
class B
{
public:
...some method's...
private:
int date;
int ID;
};
class C
{
public:
...some method's...
private:
double num;
B* obj;
};
файл где сохраняется объект класса а, который содержит объекты класса б.
list_size
date1
ID1
date2
ID2
...
...
...
файл где содержится список объектов класса ц, которые содержат указатели на экземпляры объектов класса б.
ID_obj1
num2
ID_obj2
...
...
...
это как бы не я придумал, так что погугли, найдешь кучу примеров и сотню более стройных объяснений чем мои.
ЗЫ: вон тебе уважаемый товарищ hardcase уже материалов гору снарядил, изучай.
ленивые, ленивые программисты, привыкшие к дотнету и прочим всемогущим библиотекам классов. программирование руками и головой уже не в моде!=\
[/offtop]
В порядке оффтопа. В общем случае эта задача (полная автоматизация сериализации/восстановления) в рамках C++ не решаема. В отличие от управляемых сред. Надеюсь, обяснять сей феномен не придется.
[ну тоже на правах оффтопа]
а ни кто и не спорит!:D
зы: и даже не пытается спорить!
зызы: и даже не пытается пытаться спорить, бо это очевидно.
[/оффтоп закройся]