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

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

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

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

Сообщение spv » 06.01.2007 02:19:28

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

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

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

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

P. S. Если есть русская документация по SQLite- киньтесь, пожалуйста... Я не нашёл.
spv
новенький
 
Сообщения: 71
Зарегистрирован: 26.09.2006 13:57:46
Откуда: Подмосковье

Сообщение Sergei I. Gorelkin » 06.01.2007 03:43:48

Если возможностей .ini хватает - почему нет? С использованием компонента типа TMemIniFile единственное, что остается зависеть от платформы - это путь к файлу.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение alexs » 06.01.2007 17:25:01

если не прописывать явно в коде путь к файлу а использовать функции домашеного каталога или хранть инишку рядом с запукаемым файлом - то вобще всё получается чудно
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение bw » 08.01.2007 15:26:37

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

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


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

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Иван Шихалев » 09.01.2007 14:52:01

2.5 - домашний каталог пользователя (в винде Application Data)
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Сообщение bw » 09.01.2007 16:02:26

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

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Иван Шихалев » 09.01.2007 16:31:31

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

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

Сообщение SergKam » 12.01.2007 20:53:20

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

..bw
Это почемуже? вообще нечего придумывать велосипед, есть определенный стандарт хранения информации. Это домашняя папка пользователя, как в винде так и в *nix. в винде там помойка, делай что хочеш, а в юниксах создается папка с именем программы, и впереди добавляется точка(что значит она будет скрытой). в этой папке делай что хочеш. Но лучше данные в какомто текстовом формате INI или XML или система "Аврора"(имя файла = имя параметра -> внутри , можно разбивать на поддиректории).
Все потому что если программу поставят правильно в /usr/bin то никто тебе туда непозволит никакие конфиги писать. стандарт четкий- общие настройки в /etc/имяпрограммы и конкретных пользователей в $HOME/.имяпрограммы
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение Attid » 18.05.2007 17:33:57

апну тему.
а как определить нахождение домашней директории ?
в венде это можно сделать ломанувшись в реест.
а в линуксе ? решение в лоб получить id пользователя
посмотреть имя в /etc/passwd и сложить /home/ с именем
думаю должно быть проще =) как ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2586
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Sergei I. Gorelkin » 18.05.2007 17:59:12

:) Это не в лоб, а совсем через другое место...
В линуксе стандарт де-факто - GetEnvironmentVariable('HOME'). В винде тоже есть переменные окружения APPDATA и USERPROFILE, но официально рекомендуемый способ - это функция ShGetFolderPath.
Кстати, в модуле SysUtils есть ф-ции для этих целей, но что именно они возвращают - я не разбирался.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение rudjuk1977 » 18.05.2007 18:39:45

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
rudjuk1977
постоялец
 
Сообщения: 104
Зарегистрирован: 28.04.2007 21:18:56
Откуда: Киев

Сообщение shade » 18.05.2007 19:22:11

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

В FCL есть модуль xmlconf, пока еще не ковырялся...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Sergei I. Gorelkin » 18.05.2007 20:53:16

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

Но сохранять классы он не умеет, до этого пока не дошли руки. Впрочем, сериализатор в xml есть в составе Lazarus. С другой стороны, для сохранения классов вполне годится и стандартный сериализатор.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Михаил » 21.05.2007 09:44:39

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


в Lazarus-e ведь есть юнит INIFiles, а такую компоненту не видал вроде...
INI-файлы не удобно успользовать, когда количество строк в ней переваливает за сотню, тормоза появляются при записи или чтении...
Аватара пользователя
Михаил
новенький
 
Сообщения: 13
Зарегистрирован: 31.10.2006 14:27:31

Сообщение Sergei I. Gorelkin » 21.05.2007 22:51:24

TMemIniFile - это как раз компонент из модуля IniFiles. Отличается от TIniFile тем, что не использует ф-ции WinApi, поэтому не тормозит, не имеет ограничения на размер Ini-файла в 64 кБайт, и работает на всех платформах.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград


Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru