Хранение данных в разныхОС'ях

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
spv
новенький
Сообщения: 71
Зарегистрирован: 26.09.2006 13:57:46
Откуда: Подмосковье

Хранение данных в разныхОС'ях

Сообщение spv »

Программируя под Win, зачастую хранил переменные в ini файле. В Lin существует аналог ini. Но хочется, чтобы код, отвечающий за взаимодействие в этим делом был полностью платфменнонезависимым (раз написать и не возвращаться больше).

Тут, наверное есть несколько вариантов :

1. XML- стрельба из пушки по воробьям.
2. SQLite- ИМХО, тоже несколько громоздко.
3. Какой-нибудь ещё вариант...

Хотелось бы знать, кто чем пользуется, кто что посоветует.

P. S. Если есть русская документация по SQLite- киньтесь, пожалуйста... Я не нашёл.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Если возможностей .ini хватает - почему нет? С использованием компонента типа TMemIniFile единственное, что остается зависеть от платформы - это путь к файлу.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

если не прописывать явно в коде путь к файлу а использовать функции домашеного каталога или хранть инишку рядом с запукаемым файлом - то вобще всё получается чудно
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Если тебе хватает ini, значит нечего выпендриваться и прикручивать xml и пр. А что касается места расположения фавйла, то тут есть несколько вариантов (как сказал alexs), какие и в какой комбинации использовать решать тебе:

  1. Указывать путь насильно в параметрах запуска программы (аргументы).
  2. Прописать путь в переменной окружения.
  3. Смотреть в директории с программой (только не текущей, а именно в директории программы).


Я бы необходимый файл искал именно в такой последовательности.

..bw
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

2.5 - домашний каталог пользователя (в винде Application Data)
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

2.5 - домашний каталог пользователя (в винде Application Data)
Может очень быстро превратиться в помойку. Под виндой это наверное не так страшно, домашний каталог разбит на ряд директорий с четко определенной функцией, но у POSIX систем, мне так кажется, проблема стоит острее.

..bw
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

делаем так: %home%/%program%

настройки разным пользователям лучше все-таки разные.
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

bw писал(а):2.5 - домашний каталог пользователя (в винде Application Data)
Может очень быстро превратиться в помойку. Под виндой это наверное не так страшно, домашний каталог разбит на ряд директорий с четко определенной функцией, но у POSIX систем, мне так кажется, проблема стоит острее.

..bw
Это почемуже? вообще нечего придумывать велосипед, есть определенный стандарт хранения информации. Это домашняя папка пользователя, как в винде так и в *nix. в винде там помойка, делай что хочеш, а в юниксах создается папка с именем программы, и впереди добавляется точка(что значит она будет скрытой). в этой папке делай что хочеш. Но лучше данные в какомто текстовом формате INI или XML или система "Аврора"(имя файла = имя параметра -> внутри , можно разбивать на поддиректории).
Все потому что если программу поставят правильно в /usr/bin то никто тебе туда непозволит никакие конфиги писать. стандарт четкий- общие настройки в /etc/имяпрограммы и конкретных пользователей в $HOME/.имяпрограммы
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

апну тему.
а как определить нахождение домашней директории ?
в венде это можно сделать ломанувшись в реест.
а в линуксе ? решение в лоб получить id пользователя
посмотреть имя в /etc/passwd и сложить /home/ с именем
думаю должно быть проще =) как ?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

:) Это не в лоб, а совсем через другое место...
В линуксе стандарт де-факто - GetEnvironmentVariable('HOME'). В винде тоже есть переменные окружения APPDATA и USERPROFILE, но официально рекомендуемый способ - это функция ShGetFolderPath.
Кстати, в модуле SysUtils есть ф-ции для этих целей, но что именно они возвращают - я не разбирался.
rudjuk1977
постоялец
Сообщения: 104
Зарегистрирован: 28.04.2007 21:18:56
Откуда: Киев
Контактная информация:

Сообщение rudjuk1977 »

spv писал(а):Программируя под Win, зачастую хранил переменные в ini файле. В Lin существует аналог ini. Но хочется, чтобы код, отвечающий за взаимодействие в этим делом был полностью платфменнонезависимым (раз написать и не возвращаться больше).

Тут, наверное есть несколько вариантов :

1. XML- стрельба из пушки по воробьям.
2. SQLite- ИМХО, тоже несколько громоздко.
3. Какой-нибудь ещё вариант...

Хотелось бы знать, кто чем пользуется, кто что посоветует.

P. S. Если есть русская документация по SQLite- киньтесь, пожалуйста... Я не нашёл.


Хранить в xml довольно удобно. Гораздо удобней, чем хранить в ini или в базе данных, при этом, получаем текстовый формат, который элементарно может корректироваться пользователем.
В XML, в отличие от ini есть возможность применения вложенных данных. При этом, используя определённые библиотеки работа минимальная.

Почему xml удобен? Потому, что умеет сохранять информацию о классах. Т.е. можно не задумываться особо о выгрузке данных. Они сами выгружаются с помощью одной строки кода с Вашей стороны и загружаются.

В качестве примера, библиотека для работы с xml:
http://www.delphihome.com/xml/en/download.php3
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

rudjuk1977 писал(а):В качестве примера, библиотека для работы с xml:

В FCL есть модуль xmlconf, пока еще не ковырялся...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Про xmlconf - здесь: http://www.freepascal.ru/forum/viewtopic.php?t=2158

Но сохранять классы он не умеет, до этого пока не дошли руки. Впрочем, сериализатор в xml есть в составе Lazarus. С другой стороны, для сохранения классов вполне годится и стандартный сериализатор.
Аватара пользователя
Михаил
новенький
Сообщения: 13
Зарегистрирован: 31.10.2006 13:27:31

Сообщение Михаил »

Sergei I. Gorelkin писал(а):Если возможностей .ini хватает - почему нет? С использованием компонента типа TMemIniFile единственное, что остается зависеть от платформы - это путь к файлу.


в Lazarus-e ведь есть юнит INIFiles, а такую компоненту не видал вроде...
INI-файлы не удобно успользовать, когда количество строк в ней переваливает за сотню, тормоза появляются при записи или чтении...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

TMemIniFile - это как раз компонент из модуля IniFiles. Отличается от TIniFile тем, что не использует ф-ции WinApi, поэтому не тормозит, не имеет ограничения на размер Ini-файла в 64 кБайт, и работает на всех платформах.
Ответить