|
|
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Имеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла. Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 19:47 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Yurman wrote: > Возможно ли сохранить его в файл и > при следующем запуске программы выделить требуемые объем памяти и > загрузить его из файла? Да. > Возможно я не до конца понимаю как он хранится в > памяти, но если он представляет из себя непрерывную область памяти то > чтобы эта область и была записана в файл а потом загружена. Если хочешь сохранить всю область прямо в файл (т.е. напрямую из памяти (по указателю на начало массива) - в файл) а потом загрузить назад, то так делать не стоит. При загрузке назад будет выделена область памяти, которая будет находится по другому адресу, не по тому, который был при сохранении. И тогда, если в исходной области были указатели, они будут указывать "в никуда", что приведет к AccessViolation. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 20:07 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Понятно, указателей то как раз и много. А тогда как вариант сохранить всю память программы которые занимают данные а потом загрузить. Просто структура объектов достаточно сложная и очень не хочется сохранять по каждой переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 20:18 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
YurmanПонятно, указателей то как раз и много. А тогда как вариант сохранить всю память программы которые занимают данные а потом загрузить. Просто структура объектов достаточно сложная и очень не хочется сохранять по каждой переменной.а прийдется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 20:25 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Придется так придется, но всетаки хотелось бы знать почему такое не возможно. Вот с сохранением массива я все понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 20:29 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Yurman wrote: > очень не хочется сохранять по каждой переменной. Можно чуть-чуть упростить процесс, если использовать потоки и создать операторы << и >> для используемых типов данных. Листинг будет чуть-чуть короче. Но это дело вкуса. обычно такой оператор выглядит чем-то вроде [src c++] StreamClass& operator >> (StreamClass& stream, MyStruct& myStruct){ ... return stream; } [src] Можно создать темплейт для basic_ostream и прочих, если захотеть... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 21:35 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Yurman wrote: > Придется так придется, но всетаки хотелось бы знать почему такое не > возможно. Вот с сохранением массива я все понял. Ну и ещё вариант (с извратом :)). Если указатели указывают только на адреса внутри сохраняемой области (что вряд ли), то можно перед сохранением пробежаться по ним и вычесть из них начало области данных, а после сохранения - прибавить. По идее , работать должно. Но, ИМХО, это менее удобно, чем сохранять по одному полю... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2007, 21:43 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
ErV Ну и ещё вариант (с извратом :)). Если указатели указывают только на адреса внутри сохраняемой области (что вряд ли), то можно перед сохранением пробежаться по ним и вычесть из них начало области данных, а после сохранения - прибавить. По идее , работать должно. Но, ИМХО, это менее удобно, чем сохранять по одному полю... - Access Violation можно достигнуть и более простыми способами Какой сермяжный смысл сохранять указатели? в прошлый запуск программы по этому адресу располагался объект Х? объекты надо сохранять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 11:06 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
YurmanИмеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла. Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена. Можно. В файле должны быть указаны (помимо данных) также тип объекта, максимальный размер объекта (в байтах), количество объектов... Примерно так сделано в формате файлов dbf: имеется сведение о количестве объектов (записей), сохранена структура объекта (указаны типы и размер данных в полях записи) и далее хранятся сами данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 11:30 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Сохранять в БД - не вариант? Посмотри сериализацию в boost, может поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 12:37 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
YurmanИмеется динамический массив объектов. Возможно ли сохранить его в файл и при следующем запуске программы выделить требуемые объем памяти и загрузить его из файла. Возможно я не до конца понимаю как он хранится в памяти, но если он представляет из себя непрерывную область памяти то чтобы эта область и была записана в файл а потом загружена. можно отмапировать Вашу память прямо в файл... Главное чтоб костюмчик сидел...тьху, главное чтоб в Ваших данных не было ссылок не тудась :) Как тут правильно заметили - Вы можете организовать в памяти массив своих типов и смело грузить их скопом. Более того - это будет работать гораздо быстрее, но это другая тема :) Инфу лучше поиметь в книге Рихтер "Windows для проффессионалов" с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 16:59 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
в .нете к этому есть два подхода 1) универсальный сериалайзер. В с++ его придётся писать самому и самому же заправлять метаданными. Зато можно сохранять любой объект, который сможешь описать. 2) каждый сериализуемый класс реализует интерфейс ISerializable – далее просто [де]сериализуется корень дерева объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:16 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
kolobok0главное чтоб в Ваших данных не было ссылок не тудась :)malloc свой написать можно, а что делать в оператором new? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:19 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
maXmo kolobok0главное чтоб в Ваших данных не было ссылок не тудась :)malloc свой написать можно, а что делать в оператором new? ответ... читать нуна внимательней... "Вы можете организовать в памяти массив своих типов"...никто не говорил, что эти типы должны быть размещены в выделенной памяти... лично я размещал в отмапированной (нужно было сделать движок один, под БД)... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:38 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
в смысле, размещать их надо согласно некоторой логике, так? Её можно засунуть в свой маллос. А если это у тебя с++ объект с конструктором? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:47 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
maXmoв смысле, размещать их надо согласно некоторой логике, так? Её можно засунуть в свой маллос. А если это у тебя с++ объект с конструктором? а если всё это ышо и на AT89c4051 - то ваааще жуть... давайте не бум доводить до абсурда сказанное, ладно ? Можно оперировать данными в структуре, можно перекрыть в этих структурах всё что душе угодно...можно вызывать конструкторы по конкретному указателю, можно....многое что можно... как в ту , так и в другую сторону... был задан вопрос.."можно ли"...ответ "да"... а приплетать БД - это уже от лукавого... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 17:54 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
ну и никакая религия ведь не запрещает перегрузить operator new в таком классе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2007, 18:18 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Да уж, сильно запутанно все получается. Видимо всетаки придется сохранять все по одтельности. Вобще поясню задачу. Изначально данные гузятся из БД и потом долго обрабатываются. После обработки данные в БД не сохраняются так как имеют сложную структуру (3D объекты, текстуры BMP, множество числовых массивов). Надо после ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2007, 23:27 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
загрузки из бд и обработки все скинуть в этой форме на ЖД. Но сделать так чтобы невозможно было разобрать пользователю. тоесть чтобы например был один файл и там содержалось все выше перечисленное. А то пользователь может начать искажать данные. Осложняется все тем что библиотеки с которыми я работаю (directx sdk) загружают именно из файлов (те же текстуры BMP и 3D объекты), вобщем не знаю как быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2007, 23:32 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2007, 23:53 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Спасибо за такой подробный ответ. На фатальную защиту я и не надюсь, просто некрасиво если все лежит в удобочитаемом формате - подрисовал шишку на фасад в паинте и радуешься. Пусть какой нибудь хакер отладит если ему так хочется. Гораздо важнее мне это сделать без особых заморочек. Просто хотябы запаковать в какойнидь файл и чтобы можно было продолжать пользоваться стандартными функциями загрузки из файлов - тем же D3DXLoadTextureFromFile. В идеале (я конечно не делал так не знаю) что программа будет работать с запакованным файлом как с директорией. Может существует какая нибудь библиотека чтобы такое на C++ провернуть? А по поводу защиты у меня такие мысли, координаты векторных данных можно немножко шифрануть чтобы не их вытащили, а у файла с данными посчитать контрольную сумму и какнидь хитренько сравнивать ее в ехешнике (хотя конечно от отладчика не спасет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2007, 20:30 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Yurman wrote: > Может существует какая нибудь библиотека чтобы такое на C++ провернуть? zlib? Впрочем, я ей не пользовался. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2007, 20:33 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
Yurman wrote: > подрисовал шишку на фасад в паинте и радуешься. Тогда пользуйтесь dds, например. Paint его не понимает и большинство редакторов, насколько я знаю, тоже. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2007, 20:34 |
|
||
|
Сохранение массива объектов в файл
|
|||
|---|---|---|---|
|
#18+
YurmanВ идеале (я конечно не делал так не знаю) что программа будет работать с запакованным файлом как с директорией. Может существует какая нибудь библиотека чтобы такое на C++ провернуть?Есть независимая PhysFS, есть виртуальные FS в QT и wxWidgets. Для QT поддержку архивов надо будет писать самому, для wxWidgets поддержка zip'ов уже есть. И вообще, не занимайся ерундой. Если кому-то захочется нарисовать фигу на твоем паттерне - флаг ему в руки. А вдруг кто-нибудь сумеет нарисовать для твоей игрушки скин лучше чем твой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2007, 20:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34609119&tid=2028611]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
169ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 484ms |

| 0 / 0 |
