• 0
shershen

Где хранить настройки?

Вопросы

Где хранить инишник с настройками программы? Выбираю из "/Users/<username>/Library" и "/Users/<username>/Library/Application Support", встречаются разные мнения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 ответов на этот вопрос

  • 0

А разве это кошерно? А для разных юзеров?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Что ж, не лишено смысла. Тем не менее, оригинальный вопрос остается открытым. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ну под Windows и MacOS можно типа так:

function GetMyINIPath(const ASubdir: string = ''): string;
begin
  try
    if ASubdir = '' then
    Result :=
      IncludeTrailingPathDelimiter({$IFDEF MACOS}'/Users/Shared/'{$ELSE}GetHomePath{$ENDIF}) +
      ChangeFileExt(ExtractFileName(ParamStr(0)), '')
    else
    Result :=
    IncludeTrailingPathDelimiter({$IFDEF MACOS}'/Users/Shared/'{$ELSE}GetHomePath{$ENDIF}) +
      ChangeFileExt(ExtractFileName(ParamStr(0)), '') + PathDelim + ASubdir;
    if not DirectoryExists(Result) then
      ForceDirectories(Result);
  except
    Result := '';
  end;
end;

А использовать, соответственно, так:

TPath.Combine(GetMyINIPath, _ваш_файл_);

А под Android, например, еще проще можно:

TPath.Combine(TPath.GetDocumentsPath, _ваш_файл_);

Может не слишком "красиво", но работать все должно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Под OSX можно использовать, например,

TPath.Combine(TPath.GetLibraryPath, 'Preferences');

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А в папке рядом с исполняемым файлом разве нельзя хранить?

Такая программа зарежется на постпродакшене: что на Win, что на OSX

Это только если писать софт "для себя". Ну либо если из ini данные только считываются, что не имеет смысла)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Может я чего то не знаю... Почему "зарежется"? Что преступного в том, что настройки лежат рядом с исполняемым файлом (хоть читать, хоть писать ini файл)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Запись, например в виндовые program files, запрещена для не админа. В osx аналогично. Это уже несколько оффтоп и на эту тему масса информации в интернете. (UAC, права,и.т.д..)

 

Для osx я уже выше написал что делать, для виндоса же можно использовать GetSpecialFolderPath()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Можно использовать класс TUserInifile из модуля Apple.Inifiles, который был в XE4 если не ошибаюсь. Он хранит настройки персонально для каждого пользователя в plist-ах (в ~/Library/Preferences) используя класс NSUserDefaults

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу