Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сохранение объекта в файл

36K
17 марта 2010 года
Overmax2
63 / / 11.02.2010
Народ подскажите как можно сохранить объект собственного класса в файл?
1
17 марта 2010 года
kot_
7.3K / / 20.01.2000
Используйте поиск по форуму. Невыполнение данного требования приведет к выдаче вам нарушения.
36K
29 марта 2010 года
Overmax2
63 / / 11.02.2010
Я использовал поиск но ничего не смог найти по этому вопросу, помогите пожалуйста !!! Дайте хотя бы ссылку !!!!
36K
02 мая 2010 года
Overmax2
63 / / 11.02.2010
Сори, но я всё перерыл.

Есть варианты как сохранить объекты типа TComponent, но как сохранить объект не относящийся к TComponent нету. Народ помогите !!!

Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно ???
253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Overmax2

Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно?


Пишите свои методы сохранения и загрузки, что не сложно.

307
02 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Overmax2
Сори, но я всё перерыл.

Есть варианты как сохранить объекты типа TComponent, но как сохранить объект не относящийся к TComponent нету. Народ помогите !!!

Ещё раз повторюсь, у меня объект типа "MyClass" и он не к чему не относится. Как его поместить в поток вывода и как потом загрузить обратно ???



[offtop]
ленивые, ленивые программисты, привыкшие к дотнету и прочим всемогущим библиотекам классов. программирование руками и головой уже не в моде!=\
[/offtop]

а руками слабо, да? перегрузку операторов ввода, вывода отменили? сериализация и прочие тоже не катит?(не знаю относительно билдера но вот в мфц такое дело было) профессиональная лень это хорошо, помогает писать более рациональный и простой код, но вот умственная лень, простите конечно, граничит с глупостью.

253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Сериализация, по крайней мере в Delphi, подозреваю что в Билдере тоже самое - называется streaming и работает для наследников TComponent, о чём автор уже сказал.
36K
02 мая 2010 года
Overmax2
63 / / 11.02.2010
Да при чём тут лень?
Я не знал реально ли сохранять объекты какой нибудь функцией или нет.
(ибо не вижу смысла писать своё когда есть уже и на много лучше).

Ладно судя по вашим словам такого нет, чтож понятно.

Тогда немного другой вопрос, как лучше сохранить объект в файл в виде текста или как указатель какой. Просто мой объект состоят из множество внутренних объектов заключённых в 4 вектора, в тех объектах тоже содержатся объекты из векторов и значений, ну и функций. КАк охранить всю инфу из этих объектов лучше?
(ибо в текстовом формета думаю это будет пипец как сложно и нериально, и вообще не понятно как отличать один вектор от другого в таком файле)

Пожалуйста помогите !!!
253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Простейший вариант - сохраняем всё в бинарном виде и так же загружаем.
Например, для сохранения массива (строки и подобных вещей) перед ним можно записывать его длину, а после - все содержимое. При загрузке соответственно читаем длину и по ней - требуемое количество содержимого.
36K
02 мая 2010 года
Overmax2
63 / / 11.02.2010
Цитата:

Proger_XP
Простейший вариант - сохраняем всё в бинарном виде и так же загружаем.
Например, для сохранения массива (строки и подобных вещей) перед ним можно записывать его длину, а после - все содержимое. При загрузке соответственно читаем длину и по ней - требуемое количество содержимого.


Мде жесть, ну чтож всё равно спасибо.

Если есть какие то ещё варианты, пишите плиз !!!

307
02 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Overmax2

Тогда немного другой вопрос, как лучше сохранить объект в файл в виде текста или как указатель какой. Просто мой объект состоят из множество внутренних объектов заключённых в 4 вектора, в тех объектах тоже содержатся объекты из векторов и значений, ну и функций. КАк охранить всю инфу из этих объектов лучше?
(ибо в текстовом формета думаю это будет пипец как сложно и нериально, и вообще не понятно как отличать один вектор от другого в таком файле)



каждому из сохраняемых объектов присваиваешь уникальный идентификатор. допустим есть класс а, объект которого хранит у себя в нутряжки вектор объектов класса б, и есть где то там еще список объектов класса ц, которые содержат указатели на объекты класса б, которые хранятся в объекте класса а. следишь за мыслью? сохраняешь в файл, все равно какой, объект класса а, а вместе с ним и все объекты класса б хранящиеся у него. затем отдельно или в этот же файл сохраняешь объекты класса ц, но вместо указателей на объекты класса б сохраняешь идентификаторы. при восстановлении читаешь объект класса а, а вместе с ним и все объекты класса б принадлежащие ему. затем читаешь список объектов класса ц, читаешь идентификатор, ищешь в векторе объект с таким идом и восстанавливаешь указатель. коряво, но как то так.

Proger_XP, ну поэтому и указал, что не уверен!=)

253
02 мая 2010 года
Proger_XP
1.5K / / 07.08.2004
Цитата: Artem_3A
коряво, но как то так.


Это, мягко говоря, будет сложнее, чем просто сохранять содержимое объекта в файл. Зато претендует на некоторую универсальность :)

Цитата:
Мде жесть, ну чтож всё равно спасибо.


Сложного тут ничего нет, это в основном механический код.

307
02 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Proger_XP
Это, мягко говоря, будет сложнее, чем просто сохранять содержимое объекта в файл. Зато претендует на некоторую универсальность :)



ну просто первая моя мысль: а как быть если есть указатели? указатели на функции и прочие? ведь не факт, что при простом сохранении объектов, они восстановятся и будут указывать куда надо, и даже совсем наоборот. если же иерархия простая, то да, можно и даже нужно просто механически сохранить объекты и не заморачиваться.:) решение зависит от конкретной структуры приложения.

ЗЫ: можно схитрить с идами, использовать вместо идов указатели, то бишь сохранять адреса объектов в памяти, а идом тогда будет указатель виз.:D

ЗЫЗЫ: относительно сериализации, примерно так, как я описал выше работает сериализация в C#, только за тебя это делает великий и могучий дотнет.

36K
02 мая 2010 года
Overmax2
63 / / 11.02.2010
Цитата:

Artem_3A
каждому из сохраняемых объектов присваиваешь уникальный идентификатор. допустим есть класс а, объект которого хранит у себя в нутряжки вектор объектов класса б, и есть где то там еще список объектов класса ц, которые содержат указатели на объекты класса б, которые хранятся в объекте класса а. следишь за мыслью? сохраняешь в файл, все равно какой, объект класса а, а вместе с ним и все объекты класса б хранящиеся у него. затем отдельно или в этот же файл сохраняешь объекты класса ц, но вместо указателей на объекты класса б сохраняешь идентификаторы. при восстановлении читаешь объект класса а, а вместе с ним и все объекты класса б принадлежащие ему. затем читаешь список объектов класса ц, читаешь идентификатор, ищешь в векторе объект с таким идом и восстанавливаешь указатель. коряво, но как то так.



Очень интересный вариант. Единственное что не понятно что за уникальный идентификатор. И если можно небольшой примерчик структуры сохраняемого файла(не .bin конечно, а текстово). Просто так сложно структуру уловить и не понятно немного как записывать инфу(в каком порядке).

Сори за назойливость, просто с таким ещё не сталкивался(работал в основном в MS-DOS на старом билдере)

Да и уж если тема об это, найти конечно можно, но лучше спрошу, как лучше выводить файл? Думаю как в MS-DOS через fstream не очень.

5
02 мая 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Overmax2
Единственное что не понятно что за уникальный идентификатор.

Номер объекта.

Топик боянен чуть более чем совсем. STFW.

307
02 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: Overmax2
Очень интересный вариант. Единственное что не понятно что за уникальный идентификатор. И если можно небольшой примерчик структуры сохраняемого файла(не .bin конечно, а текстово). Просто так сложно структуру уловить и не понятно немного как записывать инфу(в каком порядке).



идентификатор - допустим любое некоторое число, которое ставится в соответсвие единственному конкретному экземпляру класса.

имеем.

Код:
class A
{
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;
};


файл где сохраняется объект класса а, который содержит объекты класса б.
 
Код:
str
list_size
date1
ID1
date2
ID2
...
...
...


файл где содержится список объектов класса ц, которые содержат указатели на экземпляры объектов класса б.
 
Код:
num1
ID_obj1
num2
ID_obj2
...
...
...


это как бы не я придумал, так что погугли, найдешь кучу примеров и сотню более стройных объяснений чем мои.

ЗЫ: вон тебе уважаемый товарищ hardcase уже материалов гору снарядил, изучай.
5
02 мая 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Artem_3A
[offtop]
ленивые, ленивые программисты, привыкшие к дотнету и прочим всемогущим библиотекам классов. программирование руками и головой уже не в моде!=\
[/offtop]

В порядке оффтопа. В общем случае эта задача (полная автоматизация сериализации/восстановления) в рамках C++ не решаема. В отличие от управляемых сред. Надеюсь, обяснять сей феномен не придется.

307
02 мая 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: hardcase
В порядке оффтопа. В общем случае (полная автоматизация сериализации/восстановления) эта задача в рамках C++ не решаема. В отличие от управляемых сред. Надеюсь, обяснять сей феномен не придется.



[ну тоже на правах оффтопа]

а ни кто и не спорит!:D

зы: и даже не пытается спорить!

зызы: и даже не пытается пытаться спорить, бо это очевидно.

[/оффтоп закройся]

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог