powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сохранение массива объектов в файл
24 сообщений из 24, страница 1 из 1
Сохранение массива объектов в файл
    #34608984
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла.
Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609015
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> Возможно ли сохранить его в файл и
> при следующем запуске программы выделить требуемые объем памяти и
> загрузить его из файла?
Да.

> Возможно я не до конца понимаю как он хранится в
> памяти, но если он представляет из себя непрерывную область памяти то
> чтобы эта область и была записана в файл а потом загружена.
Если хочешь сохранить всю область прямо в файл (т.е. напрямую из памяти (по
указателю на начало массива) - в файл) а потом загрузить назад, то так
делать не стоит. При загрузке назад будет выделена область памяти, которая
будет находится по другому адресу, не по тому, который был при сохранении.
И тогда, если в исходной области были указатели, они будут указывать "в
никуда", что приведет к AccessViolation.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609033
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, указателей то как раз и много.
А тогда как вариант сохранить всю память программы которые занимают данные а потом загрузить. Просто структура объектов достаточно сложная и очень не хочется сохранять по каждой переменной.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609041
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YurmanПонятно, указателей то как раз и много.
А тогда как вариант сохранить всю память программы которые занимают данные а потом загрузить. Просто структура объектов достаточно сложная и очень не хочется сохранять по каждой переменной.а прийдется.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609045
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется так придется, но всетаки хотелось бы знать почему такое не возможно. Вот с сохранением массива я все понял.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609110
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> очень не хочется сохранять по каждой переменной.
Можно чуть-чуть упростить процесс, если использовать потоки и создать
операторы << и >> для используемых типов данных. Листинг будет чуть-чуть
короче. Но это дело вкуса.
обычно такой оператор выглядит чем-то вроде
[src c++]
StreamClass& operator >> (StreamClass& stream, MyStruct& myStruct){
...
return stream;
}
[src]
Можно создать темплейт для basic_ostream и прочих, если захотеть...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609119
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> Придется так придется, но всетаки хотелось бы знать почему такое не
> возможно. Вот с сохранением массива я все понял.
Ну и ещё вариант (с извратом :)).
Если указатели указывают только на адреса внутри сохраняемой области (что
вряд ли), то можно перед сохранением пробежаться по ним и вычесть из них
начало области данных, а после сохранения - прибавить. По идее ,
работать должно. Но, ИМХО, это менее удобно, чем сохранять по одному
полю...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34609932
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV
Ну и ещё вариант (с извратом :)).
Если указатели указывают только на адреса внутри сохраняемой области (что
вряд ли), то можно перед сохранением пробежаться по ним и вычесть из них
начало области данных, а после сохранения - прибавить. По идее ,
работать должно. Но, ИМХО, это менее удобно, чем сохранять по одному
полю... - Access Violation можно достигнуть и более простыми способами
Какой сермяжный смысл сохранять указатели? в прошлый запуск программы по этому адресу располагался объект Х? объекты надо сохранять
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34610038
YurmanИмеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла.
Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена.
Можно. В файле должны быть указаны (помимо данных) также тип объекта, максимальный размер объекта (в байтах), количество объектов...
Примерно так сделано в формате файлов dbf: имеется сведение о количестве объектов (записей), сохранена структура объекта (указаны типы и размер данных в полях записи) и далее хранятся сами данные...
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34610393
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сохранять в БД - не вариант?
Посмотри сериализацию в boost, может поможет.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611649
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YurmanИмеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла.
Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена.

можно отмапировать Вашу память прямо в файл... Главное чтоб костюмчик сидел...тьху, главное чтоб в Ваших данных не было ссылок не тудась :) Как тут правильно заметили - Вы можете организовать в памяти массив своих типов и смело грузить их скопом. Более того - это будет работать гораздо быстрее, но это другая тема :)

Инфу лучше поиметь в книге
Рихтер
"Windows для проффессионалов"


с уважением
(круглый)
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611720
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в .нете к этому есть два подхода
1) универсальный сериалайзер. В с++ его придётся писать самому и самому же заправлять метаданными. Зато можно сохранять любой объект, который сможешь описать.
2) каждый сериализуемый класс реализует интерфейс ISerializable – далее просто [де]сериализуется корень дерева объектов.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611735
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0главное чтоб в Ваших данных не было ссылок не тудась :)malloc свой написать можно, а что делать в оператором new?
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611820
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo kolobok0главное чтоб в Ваших данных не было ссылок не тудась :)malloc свой написать можно, а что делать в оператором new?

ответ...

читать нуна внимательней...

"Вы можете организовать в памяти массив своих типов"...никто не говорил, что эти типы должны быть размещены в выделенной памяти...

лично я размещал в отмапированной (нужно было сделать движок один, под БД)...


с уважением
(круглый)
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611852
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в смысле, размещать их надо согласно некоторой логике, так? Её можно засунуть в свой маллос. А если это у тебя с++ объект с конструктором?
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611884
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoв смысле, размещать их надо согласно некоторой логике, так? Её можно засунуть в свой маллос. А если это у тебя с++ объект с конструктором?

а если всё это ышо и на AT89c4051 - то ваааще жуть...


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

был задан вопрос.."можно ли"...ответ "да"...

а приплетать БД - это уже от лукавого...

с уважением
(круглый)
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34611978
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и никакая религия ведь не запрещает перегрузить operator new в таком классе?
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34614996
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж, сильно запутанно все получается. Видимо всетаки придется сохранять все по одтельности.
Вобще поясню задачу. Изначально данные гузятся из БД и потом долго обрабатываются. После обработки данные в БД не сохраняются так как имеют сложную структуру (3D объекты, текстуры BMP, множество числовых массивов). Надо после
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34614999
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
загрузки из бд и обработки все скинуть в этой форме на ЖД. Но сделать так чтобы невозможно было разобрать пользователю. тоесть чтобы например был один файл и там содержалось все выше перечисленное. А то пользователь может начать искажать данные. Осложняется все тем что библиотеки с которыми я работаю (directx sdk) загружают именно из файлов (те же текстуры BMP и 3D объекты), вобщем не знаю как быть.
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34615015
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> Но сделать так чтобы невозможно было разобрать пользователю. тоесть чтобы
> например был один файл и там содержалось все выше перечисленное.
Это болт. Если формат исходных файлов известен (а так как вы, я так понимаю,
игру пишете :) на dxsdk, которая использовать будет *.bmp/*.jpg/*.png/*.dds
и проч), то можно будет найти в исходном файле последовательность байтов,
специфичную для определенного формата и по ней разгадать всю структуру
пака. Таким образом ломаются паки для Nosferatu, Duke Nukem, Quake 1 и
многих других игр. В качестве варианта можете архив прогнать хотя бы xor'ом
или сделать его запароленным архивом, но всё равно - если захотят,
распакуют без проблем. (просто возьмут дизассемблер и отладчик) Даже если
свой формат данных сделаете - его тоже расшифруют, если захотят (Doom1
яркий тому пример). Для dxsdk, например, *.x файл имеет четко отлавливаемую
сигнатуру, *.wav файлы имеют такую же, картинки в BMP (и любом анлогичном
формате) видны визуально в любом hex редакторе, а переименование пака из
*.zip в *.pak не поможет против Far'а. Можете, конечно пожать экзешник
upx'ом, а в него впихнуть ключ для расшифровки архива, но это только даст
чуть-чуть времени, не больше. Можете также использовать собственную систему
темплейтов для *.X формата - это получше будет, но ИМХО, зашифровывание
архива от пользователя - это пустая трата времени (так как ваша игра его
открывает, то, соответственно, можно отладить эту процедуру и посмотреть,
как она это делает). Лучше это дело защищать лицензионными соглашениями и
судебными процессами :) (ИМХО).

ЗЫ. Касательно *.bmp - не используйте его, берите *.png (если уж потеря
парочки пикселей вам очень дорога) и используйте D3DXLoadTextureFromFile, а
лучше - *.dds с форматом пикселя DXT1..DXT5 (так как экономия места
значительная и это сжатие аппаратно поддерживается - т.е. в память оно
будет распаковано, только если DXT на карточке не поддерживается).
Единственная проблема - если текстуры на нормалмапы предполагаются, в DXT и
JPG их сохранять не следуют - будут видны артефакты, создаваемые при
компрессии. Для этого случая можно либо RGB png, либо 8и-битный png со
специализированной палитрой - сэкономит место на диске, но не в памяти.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34618676
Yurman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за такой подробный ответ. На фатальную защиту я и не надюсь, просто некрасиво если все лежит в удобочитаемом формате - подрисовал шишку на фасад в паинте и радуешься. Пусть какой нибудь хакер отладит если ему так хочется. Гораздо важнее мне это сделать без особых заморочек. Просто хотябы запаковать в какойнидь файл и чтобы можно было продолжать пользоваться стандартными функциями загрузки из файлов - тем же D3DXLoadTextureFromFile. В идеале (я конечно не делал так не знаю) что программа будет работать с запакованным файлом как с директорией. Может существует какая нибудь библиотека чтобы такое на C++ провернуть?
А по поводу защиты у меня такие мысли, координаты векторных данных можно немножко шифрануть чтобы не их вытащили, а у файла с данными посчитать контрольную сумму и какнидь хитренько сравнивать ее в ехешнике (хотя конечно от отладчика не спасет).
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34618681
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> Может существует какая нибудь библиотека чтобы такое на C++ провернуть?
zlib? Впрочем, я ей не пользовался.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34618683
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurman wrote:

> подрисовал шишку на фасад в паинте и радуешься.
Тогда пользуйтесь dds, например. Paint его не понимает и большинство
редакторов, насколько я знаю, тоже.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сохранение массива объектов в файл
    #34618705
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YurmanВ идеале (я конечно не делал так не знаю) что программа будет работать с запакованным файлом как с директорией. Может существует какая нибудь библиотека чтобы такое на C++ провернуть?Есть независимая PhysFS, есть виртуальные FS в QT и wxWidgets. Для QT поддержку архивов надо будет писать самому, для wxWidgets поддержка zip'ов уже есть.
И вообще, не занимайся ерундой. Если кому-то захочется нарисовать фигу на твоем паттерне - флаг ему в руки. А вдруг кто-нибудь сумеет нарисовать для твоей игрушки скин лучше чем твой?
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сохранение массива объектов в файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]