Хранение данных

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Хранение данных

Сообщение Saturn.65 » 14.01.2009 (Ср) 14:01

Читал где-то в форуме рекомендацию, что хранить данные для работы программ нужно непременно в реестре. Имею в виду, что если например поставил галочку в Checkbox, то при следующем запуске программы чтоб она уже стояла. Просто вот червь сомнения точит, а почему именно там и чем лучше? Чем хуже например тхт документ, в который так же происходит запись? К чему записывать данные в реестр и потом их считывать? Тоже самое можно сделать и по другому. Хотя я может чего и не до понимаю?
Главное, ребята, сердцем не стареть...

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Хранение данных

Сообщение Ramzes » 14.01.2009 (Ср) 14:09

Хранить данные в реестре - это прошлый век.

Я когда с .Net начал работать, в реестре не делаю практичеки ничего (кроме системных вещей)
Все настройки моих прог, храняться вместе с прогой в виде xml файла.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Хранение данных

Сообщение ANDLL » 14.01.2009 (Ср) 14:14

Вообщето прошлый век это как раз хранить чтото в папке с программой, потому что это нарушает концепцию многопользовательской оси.
Соответсвенно для хранения можно использовать или файлик в userdata, или HKCR в реестре. Где именно - совершенно зависит от третьих факторов. К примеру, важно ли что бы программу можно было скопировать со всеми настройками или же наоборот, это нежелательно. Или скажем критично, что бы все настройки программы легко бэкапились стандартным бэкапом реестра. И так далее
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Хранение данных

Сообщение Ramzes » 14.01.2009 (Ср) 14:22

Можно в самой проге это реализовать, путем не сложных манипуляций, например xml разбить.
Код: Выделить всё
<UserSettings name="User1">
   <Setting1>value1</Setting1>
   <Setting2>value2</Setting1>
</UserSettings>
<UserSettings name="User2">
   <Setting1>value1</Setting1>
   <Setting2>value2</Setting1>
</UserSettings>


Еще, если прога работает с БД (а в моем случае это подавляющие большинство программ) можно хранить настройки в БД.

Зато переносимость софта в таком случае повышаеться, скопировал папку и вуаля, работает. А еще при удалении программы надо позаботиться о том, что бы она все свои ключи посносила (инсталяторы не всегда это делают).

Или вот еще ситуиация, поставил новый драйвер, слетела винда, решил откатить стандартными средствами (востановление системы), а делал я его давно, я востановил, запускаю программу MyApplication, а она ругаеться на то, что нет ключика в реестре. и надо ее реинсталить, и заново настраивать.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Хранение данных

Сообщение Saturn.65 » 14.01.2009 (Ср) 14:35

Я вот таким макаром это организовал. Особо не смейтесь. И над русским языком в переменных. Пример:
Код: Выделить всё
'Ввод информации для записи в файл
Private Sub Command14_Click()
Dim Строка_один, Строка_два, Строка_три
Строка_один = Строка1.Text   'Установка норм в литрах
Строка_два = Строка2.Text    'Установка сезонных норм
Строка_три = Строка3.Text    'Установка расстояния Из А в Б км.

Set fs = CreateObject("Scripting.FileSystemObject")
    Set A = fs.CreateTextFile(App.path & "\Base.SQ", True)
    'Присваиваем строкам (переменные) Строка_один, Строка_два.....
    A.WriteLine (Строка_один)   'Установка норм в литрах
    A.WriteLine (Строка_два)    'Установка сезонных норм
    A.WriteLine (Строка_три)    'Установка расстояния Из А в Б км.
    A.Close

' Чтение и вывод данных
Private Sub Command3_Click()
F = FreeFile
Open App.path & "\Base.SQ" For Input As #F
        On Error Resume Next
        Do Until EOF(F)
        ' Чтение из строки файла
        Line Input #F, MyText1
        Line Input #F, MyText2
        Line Input #F, MyText3
       
        'Вывод на форму
        Строка1.Text = MyText1
        Строка2.Text = MyText2
        Строка3.Text = MyText3
       
        Loop
Close #F

Сильно чудовищно?
Т.е. в текстовый документ происходит запись и считывание. Этакий свой реестр.
Главное, ребята, сердцем не стареть...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Хранение данных

Сообщение Хакер » 14.01.2009 (Ср) 15:17

Saturn.65 писал(а):Сильно чудовищно?

Сильно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Хранение данных

Сообщение RayShade » 14.01.2009 (Ср) 16:10

В dotNet есть вообще my.settings :) И их еще и к контролам привязывать можно. И эвенты на изменение писать :) Ляпота :)
I don't understand. Sorry.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Хранение данных

Сообщение Денис » 14.01.2009 (Ср) 16:12

Значит, вот как мне видится сохранение настроек:
Код: Выделить всё
                 Однопользовательский софт                                    Многопользовательский софт
Реестр           HKLM\Software\Разработчик\НазваниеСофта\                     HKCU\Software\Разработчик\НазваниеСофта\
Файлы            DaS\All Users\Application Data\Разработчик\НазваниеСофта\    DaS\[ИмяПользователя]\Application Data\Разработчик\НазваниеСофта\

где
DaS = Documents and Settings (и аналоги в висте)
DaS\All Users и DaS\[ИмяПользователя] — записаны как переменные среды, следовательно имеют короткие имена.
Не рекомендуется хранить настройки в папке с программной или в папке Windows, потому что не все работают с правами администратора и эти папки могут быть доступны только для чтения.
При выборе хранения настроек в реестре, по указанному пути вами или программно создается ветка ключей и подразделов с ключами; в случае выбора файлов, по указанному пути создается папка профиля, в которой подпапки и файлы (xml, ini, txt, cfg, да хоть собственного формата)
А выбор между реестром и файловой системой это, ИМХО — дело вкуса и/или привычки.
--
Спасибо, ANDLL, исправлено.
Последний раз редактировалось Денис 15.01.2009 (Чт) 9:15, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Хранение данных

Сообщение alibek » 14.01.2009 (Ср) 16:30

Денис писал(а):DaS\All Users\Разработчик\НазваниеСофта\

Бред. Причем тут разработчик?
Для настроек предусмотрен каталог Application Data.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Хранение данных

Сообщение ANDLL » 14.01.2009 (Ср) 16:32

Ramzes писал(а):Можно в самой проге это реализовать, путем не сложных манипуляций, например xml разбить.
Код: Выделить всё
<UserSettings name="User1">
   <Setting1>value1</Setting1>
   <Setting2>value2</Setting1>
</UserSettings>
<UserSettings name="User2">
   <Setting1>value1</Setting1>
   <Setting2>value2</Setting1>
</UserSettings>


Нет, нельзя. У тебя отсутствует разделение прав - это глупо. Я не понимаю, о чем спор?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Хранение данных

Сообщение ANDLL » 14.01.2009 (Ср) 16:36

Денис
У тебя в путях пропущены больше куски.
Например не HKLM\name1\name2, а HKLM\software\name1\name2
И в том же стиле везде
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: Хранение данных

Сообщение RayShade » 14.01.2009 (Ср) 17:11

А в прицнипе, хранить настройки надо в некоем классе, который можно сериализовать/десериализовать в/из XML - а внутри самого класса сделать механизм для их апликейшена в саму прогу. Ну, равно как и сбора их с проги :)
I don't understand. Sorry.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Хранение данных

Сообщение Ramzes » 14.01.2009 (Ср) 17:15

RayShade, тыуже в подробности вдаешься :) ты еще код напиши ;)
ANDLL, если прога должна быть с разграничением прав, тогда настройки можно хранить в БД.
Если прога не использует БД, тогда я предпочту хранить настройки в Documents and Settings. В сторону реестр я буду смотреть в последнюю очередь.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Хранение данных

Сообщение Денис » 15.01.2009 (Чт) 9:19

alibek, ANDLL, исправил.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

    TopList  
cron