|
|
|
Канал Игры Мечты: «Злые беседы добрых программистов» |
|
|
Olorin
70 EGP
  Рейтинг канала: 1(6) Репутация: 12 Сообщения: 97 Откуда: Хьёрвард Зарегистрирован: 27.02.2006
 |
|
Kalembas : |
MSDN
|
Мне фразы по типу "реализует доступ к операциям с системой безопасности" или "инкапсулирует контексты безопансости данных" в данном случае ничего не говорят.. )
По системе безопасности в целом хотелось бы материал, чтоб понять что вообще к чему, а уже потом к частностям реализации модели переходить...
_________________ Мы на многое не отваживаемся не потому что оно трудно; оно трудно именно потому, что мы на него не отваживаемся.
Сенека Старший |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Господа опытные программисты, а как вы предпочитаете сохранять данные о настройках программы, в особенности, если они имеют довольно значительный объём?
|
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
В килобайтах около 14.
|
|
|
Digited
271 EGP
   Рейтинг канала: 4(99) Репутация: 49 Сообщения: 932
Зарегистрирован: 24.08.2004
 |
|
Это скромно, вполне можно любые текстовые конфиги.
А вообще под вин есть Windows Registry.
|
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Я знаю, что для хранения информации такого объёма как правило применяют текстовые фалы. Я и сам применяю. Меня интересует, что предпочитают использовать опытные программисты, исходя из достаточно обширной практики, а не теоретических выкладок. Кстати, ini-file мне представляются неудобными, главным образом из-за отсутствия древовидной иерархии. Регистр мне тоже не слишком нравится: (1)прямо скажем, не слишком удачные API;(2) как-то глупо засорять базу данных, от которой зависит стабильность всей системы, настройками программы, находящейся в разработке и, следовательно, постоянно глючащей.
Последний раз редактировалось: Криптон (22:18 09-04-2008), всего редактировалось 1 раз |
|
|
Sh.Tac.
151 EGP
  Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005
 |
|
Криптон : |
ini-file мне представляются неудобными, главным образом из-за отсутствия древовидной иерархии
|
а кто мешает самому устроить там древовидную иерархию, наставив скобочек [] или {}
или юзайте хмл
Цитата: |
глупо засорять базу данных, от которой зависит стабильность всей системы, настройками программы ... постоянно глючащей
|
настолько глючащей, что способна уронить базу? - талантище
_________________ This is what you get ...
(c) Radiohead |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Shirson : |
Непонятно, только, зачем пытаться обвинить кого-то в глупости, толком не понимая о чём речь <..> Для человека, который решил спросить мнения у людей с практикой, у тебя получилось не слишком убедительно. А вот для кулхацкера - в самый раз
|
Гм. На самом деле я довольно трезво оцениваю свои способности, и могу представить, что будет твориться в реестре, если мой монстрик при каждом запуске примется (в результате какой-нибудь глупой моей ошибки) записывать эти 14 Кб в новое место. Если кому-то показалось, что я обвиняю его в глупости, то прошу заметить, что это было не так; "как-то глупо засорять" - имелось в виду глупо с моей стороны.
Sh.Tac. : |
а кто мешает самому устроить там древовидную иерархию, наставив скобочек [] или {}
|
Не кто не мешает. Для организации такого файла есть стандартные функции?
|
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
1) Почему в новое место реестра то?
2) Можно ведь написать код нормально
Что за данные? Можно поконкретнее? И какие к ним требования?
_________________ MOV topka, C++ |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Jurec,почему в новое место - да потому что у меня эти идиотские регистровские API ещё ни разу правильно не заработали! И доверие к своим талантам в этой области у меня подорвано.
Написать код нормально можно. Но пока я его напишу, реестр уже загадится.
Данные (на текущий момент):4 динамических списка (небольшие, ожидаемый максимум - у одного около 30 элементов, у остальных - не более 10); элементы - структуры, содержащие не более 6 текстовых полей. Ну ещё несколько текстовых полей, не входящих в списки.
Требования: должно хранится. Для домашнего употребления. Попыток взлома не ожидается. Самой программой будут пользоваться человек пять.
Это если по минимуму. Но хотелось бы найти решение, которое можно было бы применить и в последующих проектах.
Shirson, я и пытаюсь узнать разнообразные способы. По поводу базы данных - а реестр-это не база данных?
Последний раз редактировалось: Криптон (23:18 09-04-2008), всего редактировалось 2 раз(а) |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
xml или в бинарный файл писать.
реестр и ини файлы - забудь
_________________ MOV topka, C++ |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Jurec, наверняка существуют стандартные функции для работы с xml. Где найти их описания?
Последний раз редактировалось: Криптон (23:22 09-04-2008), всего редактировалось 1 раз |
|
|
BlackCat
200 EGP
  Рейтинг канала: 3(33) Репутация: 18 Сообщения: 2193 Откуда: г. Минск, Республика Беларусь Зарегистрирован: 28.11.2006
 |
|
Рекомендую xml. И древовидную структуру любой сложности можно построить. И размеры небольшие получаются. И в реестр ничего писать не нужно (по ходу я вообще не люблю реестр).
_________________ Я циник, эгоист, мизантроп, социофоб, пофигист, скептик! Одним словом - Няшка. :) |
|
|
Digited
271 EGP
   Рейтинг канала: 4(99) Репутация: 49 Сообщения: 932
Зарегистрирован: 24.08.2004
 |
|
Криптон : |
наверняка существуют стандартные функции для работы с xml. Где найти их описания?
|
В винде, вроде как, их нет совсем. Есть msxml parser, но он едва ли стоит на каждой машине с виндой.
Для с++ советую tiny xml parser - маленький и весьма функциональный.
Я вот свой велосипед писал когда-то - если есть регулярные выражения (из boost или откуда еще), то парсить руками не особо сложно, тем более если надо немного от всей спецификации xml.
ps это правда, что избыточность у xml большая. Для 14 кб вполне можно юзать .ini/.cfg со стандартной структурой
[header]
name=value; // comment
Последний раз редактировалось: Digited (08:46 10-04-2008), всего редактировалось 1 раз |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Господа, я уже понял, что подавляющее большинство разработчиков не испытывают нужды в древовидной структуре. Но у меня возникли большие проблемы при попытке втиснуть в INI-файл динамический массив, элементы которого являются структурами. У вас, очевидно, таких проблем не возникает. Вы такого рода задачу уже решили? Тогда просьба поделиться решением.
Кстати, очевидно, что для данных размером 14 кб избыточность xml роли не играет.
Shirson, ещё раз про тот "ужасный" пост. Я писал:
Цитата: |
Реестр мне тоже не слишком нравится: <...> как-то глупо засорять базу данных, от которой зависит стабильность всей системы, настройками программы, находящейся в разработке и, следовательно, постоянно глючащей.
|
На мой взгляд, всё очевидно: Реестр - это база данных, от которой зависит стабильность OS (согласны?); засорять его глупо. Что тут такого возмутительного?
|
|
|
Ivanoff Alex
860 EGP
     Репутация: 205 Сообщения: 3827 Откуда: Киев, Украина Зарегистрирован: 26.04.2004
 |
|
Криптон : |
Кстати, очевидно, что для данных размером 14 кб избыточность xml роли не играет.
|
В чем проблема хмл? мощностей не хватает? - неверю!!!
есть к томуже binary xml... там ваще минмимум избыточности в ущерб читабельности...
_________________ Три слова - это два слова. |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Чёрт побери, неужели я так непонятно выражаюсь? Я имел в виду, что при объёме данных в 14 кб совершенно плевать на всякие накладные расходы, связанные с избыточностью.
Последний раз редактировалось: Криптон (12:11 10-04-2008), всего редактировалось 1 раз |
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Shirson, читая нижеследующее, учитывайте, пожалуйста, что я - воиствующий ламер (однако мои программы даже иногда работают).
Во-первых, пишу я, естественно, на Delphi.
Во-вторых, проблема у меня была, естественно, не столько с форматом, сколько с инструментарием, приспособленным к моим нуждам.
В-третьих, решение я уже нашёл! (правда, автор решения не совсем я).
Краткое описание решения:
Cкрытый текст (кликните здесь для просмотра)
Создаётся класс-наследник TComponent. В нём создаются published - свойства класса TCollection, по свойству на каждый динамический массив. Ну и, естественно, конструктор и деструктор.
Далее, для каждой коллекции создаются классы-наследники TCollectionItem, published свойства которых соответствуют нужным полям структур.
Далее, в vcl имеются встроенные средства для сохранения и загрузки компонентов и их наследников в текстовый или бинарный файл (формат *.dfm).
Cкрытый текст (кликните здесь для просмотра)
Код: |
procedure LoadFromFile(FileName:String;Component:TComponent);
var
FileStream:TFileStream;
BinStream:TMemoryStream;
begin
if not FileExists(FileName) then
exit;
FileStream:=TFileStream.Create(FileName,fmOpenRead);
try
BinStream:=TMemoryStream.Create;
try
ObjectTextToBinary(FileStream,BinStream);
BinStream.Seek(0,soFromBeginning);
BinStream.ReadComponent(Component);
finally
BinStream.free;
end;
finally
FileStream.Free;
end;
end;
|
Код: |
procedure SaveToFile(FileName:String;Component:TComponent);
var
FileStream:TFileStream;
BinStream:TMemoryStream;
begin
FileStream:=TFileStream.Create(FileName,fmOpenWrite or fmCreate);
try
BinStream:=TMemoryStream.Create;
try
BinStream.WriteComponent(Component);
BinStream.Seek(0,soFromBeginning);
ObjectBinaryToText(BinStream,FileStream);
finally
BinStream.free;
end;
finally
FileStream.Free;
end;
end; |
|
Результат: минимум моего кода, всё очень удобно.
|
В-четвёртых, весь ваш опыт, сленг и понятия не разубедят меня, что реестр (а также, вы будете смеяться, xml и ini-файлы)-это база данных, поскольку служит для хранения структурированных данных.
|
|
|
Digited
271 EGP
   Рейтинг канала: 4(99) Репутация: 49 Сообщения: 932
Зарегистрирован: 24.08.2004
 |
|
Я когда-то для FaBalance (прога для Х2) писал работу с инишками с помощью TStringList: легкая загрузка и сохранение, работа с парами имя=значение. Просто и сердито.
|
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Shirson, в том-то и дело, я задействовал стандартный для нынешнего Delphi механизм сохранения объекта в файл, реализованный программистами Borland.
|
|
|
Криптон
1011 EGP
       Рейтинг канала: 3(44) Репутация: 164 Сообщения: 2667 Откуда: Москва Зарегистрирован: 05.04.2008
 |
|
Shirson : |
"Сохранение объёкта в файл" и "Сохранение древовидной информации" стоят на совершенно разных уровнях абстракции. Примерно как "Особенности разведения свиней в средней полосе" и "Приготовление домашних пельменей".
|
Да, это так, и ваша аналогия весьма близка. Но мне-то нужны в конечном счёте пельмени, а не свинина! И ходить за пельменями в магазин гораздо удобнее (хотя и дороже), чем откармливать свиней, а потом готовить из них пельмени.
Shirson : |
Мой совет, попробуй теперь решить вопрос по сохранению этой же инфы в ini файле, или просто в [параметр]=[значение]. Очень полезно будет.
|
Да, это будет полезно. В плане обучения, создания эффективных алгаритмов, и т.д. Вот скажите, при работе с ini-файлами вы пользуетесь функциями из серии WritePrivateProfileString или чем-то собственной разработки?
Кстати, подтвердите пожалуйста в явном виде, что знаете, что такое dfm-формат, во избежание различных недоразумений.
|
|
|
|
|
|
Канал Игры Мечты: «Злые беседы добрых программистов» |
|