Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение документа  (Прочитано 18182 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« : 22-02-2011 09:36 » 

День добрый.
Есть прожка, необходимо хранить состояния ее объектов. Копий прожек может быть много у одного юзера (просто копирование папки с .exe), и они все могут быть одновременно запущены. Стало быть, хранить сериализованные xml-объекты в Properties.Settings.Default не выйдет. Выход вижу следующий - хранить объекты в xml-файлах папки экзешника.
Есть одно "но" - хотелось бы скрывать информацию о сохраненных объектах. Можно ли как-то сохранять информацию в ресурсных файлах? В самом .exe?

« Последнее редактирование: 22-02-2011 13:02 от yudjin » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-02-2011 09:48 » 

Допустим, мы нашли способ сохранять объекты каждого экземпляра приложения по отдельности.

Приложение завершило работу, файл с состоянием его объектов остался.

Как дальше можно использовать эту информацию? Ведь при запуске следующего экземпляра он будет использовать собственные данные.

Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 22-02-2011 09:51 » 

yudjin, состояния объектов хранятся во время работы программы или между сессиями? В первом случае имеет смысл создавать временные файлы, во втором - постоянные, с ведома пользователя (ну, или как-то иначе давая ему выбирать, какую сессию следует восстановить).
Пользователь может запустить один и тот же экзешник несколько раз? Если нет (запускает каждый раз из отдельной папки) - то можно какие-то подключи делать, зависящие от пути к файлу.
« Последнее редактирование: 22-02-2011 09:54 от Вад » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 22-02-2011 09:56 » 

yudjin, а если пользователь запустит прожку из одной папки несколько раз? И чем будет отличаться повторный запуск прожки? Например, я запускаю три инстанции: 1, 2, 3. Допустим, параметры сохраняются в трёх файлах. Теперь я снова запускаю прогу 3 раза, в какой последовательности будут считаны параметры?

зы Какое-то странное задание.  Здесь была моя ладья...  Не понял  А черт его знает...
« Последнее редактирование: 22-02-2011 09:59 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
zubr
Гость
« Ответ #4 : 22-02-2011 10:02 » 

Ресурсы в экзешнике можно обновлять, если запустить другой экзешник, а обновляемый закрыть. Но, имхо, лучше данные сохранять в отдельном зашифрованном файле.
Записан
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 22-02-2011 11:49 » 

Какое-то странное задание.  Здесь была моя ладья...  Не понял  А черт его знает...
+1

Хорошо, а если так. Прога одна, но можно сохранять состояния в файле, ассоциированном с этим проложением. Как .doc ассоциируется с MS Word. Тогда, "насохраняв" файлов, можно будет запускать несколько инстантов с различными состояниями, да?
PS: что-то вроде того, как в MFC можно было OLE-объекты сохранять, а потом их запуску загружалась сама программа...

yudjin, состояния объектов хранятся во время работы программы или между сессиями?
Между сессиями
Пользователь может запустить один и тот же экзешник несколько раз?
Изначально - нет, теперь допускаю такую возможность


« Последнее редактирование: 22-02-2011 11:54 от yudjin » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 22-02-2011 11:55 » 

Кстати, эта программа не предназначена для управления двумя модемами ADSL, подключенными к одной линии? Один на прием, другой на передачу...
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #7 : 22-02-2011 11:57 » 

Нет Улыбаюсь Это просто пищалка-перделка, но вот обязательно нужно сохранять данные между сессиями. И дело в том, что юзер захочет непременно запускать сразу несколько таких пищалок, чтоб, извините, пердеть по-громче
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 22-02-2011 12:18 » 

DaleКласс!  Жжешь
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #9 : 22-02-2011 12:25 » 

Ладно, раз такие пироги - это клиент (он же и бот) для славной браузерной игрухи Travian 4.
Юзер нащелкает логики, скриптиков, и проч. ерунды в клиенте. Но ведь он его когда-нибудь закроет Улыбаюсь Все это можно сохранить в файле. Но юзер захочет, чтобы одновременно работало 10, 100, 1000 ботов...

Да хотя бы кукисы сохранять - и то надо. Отдельный инстанс - отдельный логин, свои кукисы...

« Последнее редактирование: 22-02-2011 12:27 от yudjin » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 22-02-2011 12:26 » 

Хорошо, а если так. Прога одна, но можно сохранять состояния в файле, ассоциированном с этим проложением. Как .doc ассоциируется с MS Word. Тогда, "насохраняв" файлов, можно будет запускать несколько инстантов с различными состояниями, да?

Нууу из этого можно что-то выжать.

Но при запуске очередной инстанции нужно будет показывать меню содержащее свободные (незапущенные), но сохранённые конфигурации, чтобы пользователь мог выбрать нужную или начать с нуля. Инфу (путь) о сохранённых конфигурациях можно хранить в реестре (типа списка MRU файлов).
Тогда решается проблема сохранения (на усмотрение юзера/дефолт), можно поставить защиту (пароль), неважно откуда запущена инстанция.


Если выбор конфигураций должен происходить автоматически, то тогда выбрать какой-нить порядок. Напрмер, в порядке завершения инстанций или обратный ему.

Те я запускаю прожку: 1 2 3 раз.

Теперь закрываю все инстанции в последовательности: 2 3 1 (ессно всё автоматически куда-то сохраняется).

Снова запускаю - используется конфигурация 2
Снова запускаю - используется конфигурация 3
Снова запускаю - используется конфигурация 1
« Последнее редактирование: 22-02-2011 12:32 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 22-02-2011 13:45 » 

Ранняя весна в этом году выпала... Еще целая неделя до марта, а у нас уже и корованы грабят, и модемы вовсю спариваются... Что будет, когда солнышко пригревать начнет?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #12 : 22-02-2011 13:49 » 

за MRU спасибо - узнал, как называется.
А как называется такая штука, когда программа сохраняет файл, который будет ассоциироваться с этой программой?? Почти любое приличное ПО может сохранять свои документы (.doc, .sln, да их тысячи!!) В общем, как зарегистрировать расширение?
Ведь я мог бы в своем боте сохранять документ, скажем .bot, а затем, по даблклику - запускается мое .exe, оно знает путь к файлу, который послужил ативатором. Далее, я десериализую этот файл и получаю инфу об объектах.
Я верно мыслю?

Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 22-02-2011 13:59 » 

Можно связать расширение файла и приложение для его обработки посредством проводника. При первой попытке открыть файл с незнакомым расширением он спросит, с каким приложением его ассоциировать. Если установить птичку, которая запоминает выбор, эта связь сохранится.

Можно и через редактор реестра, но дольше.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #14 : 22-02-2011 14:02 » 

Через реестр хоть и дольше, но меньше головняка для юзера, если это автоматом сделать. В общем, тут вроде решилось.
Не совсем ясно, как до приложения дойдет, что его запустили файлом каким-то?
Через параметры Main()? А если это, скажем, WPF-Application - там никакого Main нет...

Update.
А install package студийный регистрирует расширения?

Добавлено через 7 минут и 32 секунды:
Собственно, все решилось. И программная регистрация в реестре, и параметры (которые, кстати, не зависят от GUI), передающиеся в точку входа действительно содержат путь к файлу...
Спасибо за помощь!

Dale корованы бот уже грабит с начала февраля Улыбаюсь

ЗЫ: Такое ощущение, что нужно просто выговориться - пока писал все эти посты, идеи возникали сами.
« Последнее редактирование: 22-02-2011 14:20 от yudjin » Записан
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #15 : 23-02-2011 10:20 » 

Еще такой вопрос. У меня "древовидная" диаграмма классов.
Есть некий интерфейс IApplication, своеобразная точка входа. Дальше - ISession, и потом все разростается.


При сохранении состояния я хочу сохранять в файле экземпляр сессии (без поля Client). Он тянет за собой сохранение полей Аккаунт, МапИнфо и Менеджера. Менеджер тащит с собой очередь задач, задача - ID и объект класса Unit, который ссылается еще на 2-3 класса.... и т.д.

Как решаются такие задачи? Есть мысль создать классы типа SessionData, UnitData, AccountData, ManagerData, и проч. Там будут только примитивные типы (насколько это возможно). И собственно, сами Session, Unit, Account, Manager могут восстанавливать свое состояние из соотв. данных и сохранять его в соотв. экземпляре.

Единственная проблема - на первый взгляд тяжело прикинуть количество дополнительных (что-то_Data) классов. Это и ставит в тупик - их количество в худшем  случае будет равно количеству рабочих классов.

Это похоже на типовую задачу, только я не знаю, куда копать.

* _app.png (24.35 Кб - загружено 1420 раз.)
* _manager.png (230.57 Кб - загружено 785 раз.)
* _entites.png (597.69 Кб - загружено 798 раз.)
« Последнее редактирование: 23-02-2011 10:29 от yudjin » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 23-02-2011 10:32 » 

Это похоже на типовую задачу

Совершенно типовая. Паттерн GoF Memento.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
yudjin
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #17 : 23-02-2011 10:41 » 

Чего я и боялся - для каждого класса придется реализовывать класс-хранитель.
Или заставлять каждый класс восстанавливать себя из xml-строки.

в первом случае - дублирование классов, во втором - размазывание логики сериазилации по всем классам... Как-то не очень красиво.
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 23-02-2011 10:51 » 

Почему для каждого класса? Можно сделать общий хранитель (собственно, Memento, насколько понимаю, вполне это допускает): просто возвращаешь из класса унифицированное представление объекта (скорее всего, в виде словаря "ключ-значение", где ключ - имя или другой идентификатор поля, а значение - соответственно, сериализованное значение данного поля). А уж переписывать затем этот словарь в Ini-файл или там в xml, или ещё как обрабатывать - дело отдельное.
« Последнее редактирование: 23-02-2011 10:53 от Вад » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 23-02-2011 12:45 » 

Если надо 1-1000 параллельных ботов, то какой смысл это делать отдельными экземплярами приложения? Приложение должно быть одно, в нём, если так хочется, 1000 потоков и централизованное хранилищие конфигураций всех этих потоков.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines