![]() |
|
|
![]()
|
|
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Задача такая - нужно сохранить текущую работу в файл. Наподобие как в Word можно сохранить файл с набранным текстом. То есть на выходе должен получаться файл с зарезервированной иконкой и ассойиированный с моим приложениме. В последствии двойной клик в проводнике по этому файлу - и все его содержимое загружается в программу.
Но вопрос не в том, как сделать иконку и установить ассоциативню связь с моим приложением, а в том как организовать хранение всех переменных в файле. В программе имеется множество полей, переключателей, таблиц. Как сделать своеобразный "снимок" текущей работы и записать все это в файл с тем чтобы в последствии из этого файла восстановить состояние всех полей, переключателей и таблиц? Для примера. Допустим есть такие управляющие элементы: "Поле для ввода А". "Поле для ввода Б". "Поле для ввода В". "Переключатель". "Таблица" (в таблице 5 колонок). Например в текущей работе такое состояние: Текст в поле А - "текстА". Текст в поле Б - "текстБ". Текст в поле В - "текстВ". Значение переключателя - true. В таблице 3 записи: первая запись - "1кол1,1кол2,1кол3,1кол4,1кол5" вторая запись - "2кол1,2кол2,2кол3,2кол4,2кол5" третья запись - "3кол1,3кол2,3кол3,3кол4,3кол5" Вот нужно все это записать в файл и затем загрузить из него, записав все значения полей, таблиц и запомнив состояние переключателя. |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Так выводи данные из контролов в в файл в определённом порядке. А затем - при обратной загрузке из файла - значение из соответствующей строчки подставляй соответствующему контролу.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Это слишком прямолинейное и неудобное решение. Можно ли как-то организовать файл, чтобы обращаться к тому или иному значению можно было по переменной? То есть чтобы загрузить некое значение из файла в поле, скажем Edit1->Text, мне нужно было знать не порядковый номер этой строки в файле, а имя некоей переменной. Например Edit1->Text = File->MyEdit. Что-то тмпо того. Хранение просто построчно всей информации неудобно, потому что если я сдвину строки в файле, то придется заново переписовать функции загрузки и сохранения. А если обращение идет по неким переменным, то ничего и переписывать не надо. |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
используй INI файл. WritePrivateProfileString() и GetPrivateProfileString()
Добавлено через 25 секунд очень удобно |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Ну, тогда действительно INI-файл. Секция - переменная - значение.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| kin |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 9.5.2008 Репутация: 1 Всего: 6 |
Привет! На мой взгляд, все до безобразия просто: посмотри как организован проект у того же Buildera или VS. Это XML-файл (или что-то подобное) где каждый узел - это отдельный элемент твоей работы, атрибуты этого узла (или его дочерние узлы) - свойства элемента. Ну а в чем плюсы(минусы) такой конструкции разберешься сам.
|
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
слишком мудрено. В INI указал нужный ключ и получил данные. А так можно и в реестр настройки совать.
|
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
ini вроде как выглядит неплохо, только я пока не разбирался в детальном принципе работы. Но тут есть вот еще какая заковыка. Файл должен быть с моим расширением. Например "файл.my". Как можно его обрабатывать как ini-файл?
|
|||
|
||||
| vol4ek |
|
||||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
запросто. любое расширение.
Добавлено через 2 минуты и 24 секунды
Добавлено через 7 минут и 22 секунды одно уточнение.
если в последнем параметре указано имя файла без пути, по умолчанию файл создается в папке Windows. |
||||
|
|||||
| kin |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 9.5.2008 Репутация: 1 Всего: 6 |
||||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
А как решить задачу хранения данных таблицы в ini? Когда есть набор статичных полей для записи или чекбоксы - то все понятно, каждому контролу - своя запись в ini. А в таблице может быть несколько строчек. Как организовать хранение табличных данных в ini?
И еще, я так понял расширение могу давать файлу любое, но работать с ним как с ini и все будет ОК? |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
будет ок. Какое расширение задано в функциях, с тем расширением и будет работать.
хранение таблицы. Ну например так:
|
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Еще вопрос. Можно ли как-то зашифровать этот файл при записи? Чтобы его нельзя было просматривать например в блокноте. Соответственно перед считыванием информации - расшифровать.
|
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
не скажу не знаю. файл текстовый, блокнотом просматривается, выглядеть будет так:
[секция] ключ1 = значение ключ2 = значение [секция2] ключ1 = значение и т.д. если там будет хранится инфа которую нужно спрятать от чужих глаз, может стоит писать структуры в бинарный файл. Добавлено через 1 минуту и 1 секунду хотя мудрено. а что там у тебя лежать-то будет? |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Обычный файл. В нем ничего секретного. Просто хочу лишить пользователя возможности править файл вручную, а то может что-то некорректно подправить. Например некое поле не может принимать значение больше 100. Пользователь в файле выставит 200 - вот и получится некорректный итог программы.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |