Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Сохранение параметров в файле


Автор: =Женек= 15.9.2013, 10:17
Господа, есть программа, есть настройки, которые нужно записывать а в дальнейшем, при загрузке читать.
Я реализовал это так, как мне подсказала логика - запаковал все настройки в структуру TParams (приводить ее здесь не буду, ничего особенного). 
Создана единственная переменная:
 TParams Params;

которая тупо пишется в файл.
Но периодически файл с настройками бьется. Возможно у меня глюк в программе и в файл попадает мусор. 

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


Другими словами, я бы хотел, чтобы форумцы поделились опытом  - как вы решаете эту задачу? Может есть какие библиотеки готовые?

Автор: ChipNDale 15.9.2013, 10:50
Храните в любом удобном формате: ini, json, xml. Библиотеки для работы легко гуглятся.

Автор: =Женек= 15.9.2013, 11:04
не.... программа предназначена для контроля персонала.
Файл не должен с легкостью редактироваться ручками.

Автор: ChipNDale 15.9.2013, 11:07
Хм... SQLite?

Автор: =Женек= 15.9.2013, 11:24
Цитата(ChipNDale @ 15.9.2013,  11:07)
Хм... SQLite?

Сейчас гляну...
P.S. Ник у вас... Как раз по ТВ сейчас мультик идет соответствующий)))

Автор: =Женек= 15.9.2013, 13:10
Штука, конечно, удобная.
А вот чем бы ее прикрутить к Builder XE ?
Нашел какой-то AnyDAC (он же FireDAC), так там нет инсталлятора под билдер, только под дельфи...

Автор: akizelokro 16.9.2013, 01:06
Цитата

Но периодически файл с настройками бьется. Возможно у меня глюк в программе и в файл попадает мусор. 


Чёто у меня никогда не падает и не бьётся. Надо проработать.

Цитата

не.... программа предназначена для контроля персонала.
Файл не должен с легкостью редактироваться ручками.

Винда? Закинь в ресурсы, если такое требование. Как сделать.. делают.

Автор: =Женек= 16.9.2013, 05:53
Цитата

Чёто у меня никогда не падает и не бьётся. Надо проработать.

Ну представь себе такую ситуацию, ты работаешь с программой, ввел 50 параметров, ручками. А потом тебе понадобилось предусмотреть в программе 51-й параметр.  Ты добавил его в структуру. И теперь программа ранее записанную в файл структуру из 50 параметров не прочтет.

Автор: baldina 16.9.2013, 09:40
Цитата(=Женек= @  15.9.2013,  11:04 Найти цитируемый пост)
Файл не должен с легкостью редактироваться ручками.


Цитата(ChipNDale @  15.9.2013,  10:50 Найти цитируемый пост)
 ini, json, xml.


+ziplib

Автор: borisbn 16.9.2013, 14:11
Цитата(=Женек= @  15.9.2013,  11:04 Найти цитируемый пост)
Файл не должен с легкостью редактироваться ручками.

Цитата(ChipNDale @  15.9.2013,  11:07 Найти цитируемый пост)
Хм... SQLite? 

Дык .s3db - файлы легко редактируются при помощи http://www.sqliteexpert.com/
Тогда уж нужно данные шифровать (или просто сжимать, как предложил baldina)

Автор: ТарасАтавин 16.9.2013, 15:26
Цитата(=Женек= @  15.9.2013,  10:17 Найти цитируемый пост)
Я хотел спросить, может существуют какие-то правила хорошего тона программирования при сохранении параметров, которые позволяют получить глюкоустойчивый код? 

1. Если формат может меняться, например, если развивается сам проект, чьи опции требуется сохранять, то следует предусмотреть резервные поля и/или резервные коды (теги). Заполнение резервного поля чем либо, кроме нулей, будет означать, что файл сохранён в новой версии формата, прога при чтении делает выводы и реагирует. Использование резервного кода прямо говорит о новой версии формата.
2. Ни когда не сохраняй на диск указатели, в дисковом формате их должны заменять смещения. От начала файла, от начала секции файла, от заголовка файла, от заголовка секции файла, от самого поля смещения... От чего угодно, но это адрес не в адресном пространстве оперативной памяти, а в придуманной тобой схеме внутрифайловой адресации.
3. При загрузке элементов зарезервированного массива или проверяй количество его элементов, или пусть это будет константа.
4. Даже если количество элементов массива - константа, не полагайся на то, что оно известно программе. Оно должно или явно храниться в поле/теге файла, или вычисляться по другим полям/тягам, или за массивом должен следовать некий терминальный элемент, по которому можно будет определить, что массив закончен.

Автор: bsa 17.9.2013, 10:37
Цитата(=Женек= @  15.9.2013,  11:17 Найти цитируемый пост)
Другими словами, я бы хотел, чтобы форумцы поделились опытом  - как вы решаете эту задачу? Может есть какие библиотеки готовые?
boost::serialization.

Автор: Amp 17.9.2013, 11:02
Цитата(=Женек= @  15.9.2013,  13:10 Найти цитируемый пост)
А вот чем бы ее прикрутить к Builder XE ?

У SQLite есть сборка, где все его исходники слиты в два файла (cpp и h). Они просто добавляются в проект.

Автор: borisbn 17.9.2013, 11:16
< зануда >
Цитата(Amp @  17.9.2013,  11:02 Найти цитируемый пост)
все его исходники слиты в два файла (cpp и h)

</ зануда >

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)