![]() |
|
|
![]()
|
|
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 - вот и получится некорректный итог программы.
|
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
дай файлу расширение системное com,exe,dll и спрячь куда нибудь в Windows\\system32 например. Не забудь указать путь в GetPrivateProfileString(). Создать свою папку можно так CreateDirectory("путь\\имя",NULL);
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Нитонисе, ещё извращённый способ: хранить настройки в .dbf. И таблица, и редактировать "простому смертному" не дано.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
мы не ищем легких путей. |
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Не, файл прятать не нужно. По сути файл - это проект пользователя. Как отдельный файл Word например. Этот файл можно передать другому пользователю и он может посмотреть работу первого пользователя. |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 25 Всего: 50 |
MDB
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
Вообще я бы так и сделал, особенно если сохраняемых настроек много. Добавлено через 33 секунды
Или даже так. -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Обойти форму (проперти Components и ComponentsCount кажется) и сбросить содержимое контролов (имя брать из проперти Name, а вот значение придется вытаскивать вручную для каждого типа контрола). Сбрасывать можно как в ini файл, так и в xml - как удобнее
Подписать файл. Например посчитать его MD5 и записать в конец Это сообщение отредактировал(а) xvr - 16.11.2011, 14:34 |
||||
|
|||||
| ZVano |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: 1 Всего: 4 |
Можно воспользоваться BASE64 кодированием значений. API: CryptStringToBinary и CryptBinaryToString. У меня их вызовы обернуты в библиотеку. Не очень удачный вариант кода, но все же лучше чем ничего. myLib.h
myLib.cpp
Используем например так:
Это сообщение отредактировал(а) ZVano - 24.11.2011, 10:32 -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
||||||||
|
|||||||||
| XPyCT |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 24.8.2007 Где: Moldova Репутация: 10 Всего: 10 |
Все гораздо и гораздо проще.
1 создаешь структуру 2.Вектор 3. #include<stdio.h>, #include<vector> и сохраняешь и читаешь все что тебе нужно из вектора сохраняешь в бинарный файл расширение дат или какое тебе нужно лично читаю файлы на ура такого рода как приложен в аттаче Присоединённый файл ( Кол-во скачиваний: 7 )
Exp.dat 16,77 Kb |
|||
|
||||
![]()
|
| Правила форума "С++ 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. |