Подтвердить что ты не робот

WPF/С#: Где я должен сохранять файлы пользовательских настроек?

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

В настоящее время я использую путь, возвращенный из typeof(MyLibrary).Assembly.Location, в качестве местоположения по умолчанию для хранения файлов, сгенерированных или требуемых приложением.

EDIT: Я нашел два связанных/интересных вопроса:

ИЗМЕНИТЬ № 2: Это всего лишь примечание для таких людей, как я, которые раньше никогда не использовали настройки. Настройки довольно полезны, но мне приходилось делать целую кучу копания, чтобы выяснить, что происходит (из мира Python, а не того, что я тоже использую). Все усложнилось, поскольку я хотел сохранить словари и, видимо, они не могут быть сериализованы. Настройки, похоже, также хранятся в трех разных файлах в зависимости от того, что вы делаете. Существует файл app.config, user.config и settings.setting. Итак, вот еще две ссылки, которые я нашел полезными:

4b9b3361

Ответ 1

Вы можете легко использовать параметры приложения.

Если вы этого еще не сделали, просто щелкните правой кнопкой мыши по проекту и выберите "Свойства". Перейдите на вкладку "Настройки". Убедитесь, что вы выбрали "Пользователь" для области действия (в противном случае настройка доступна только для чтения).

Код для доступа к нему прост:

forms.Width = Application1.Properties.Settings.Default.Width;

Если вам нужно сохранить его:

Application1.Properties.Settings.Default.Width = forms.Width;
Application1.Properties.Settings.Default.Save();

В приведенном выше примере Width - это имя настраиваемого параметра, которое вы определяете на вкладке "Параметры", а Application1 - это пространство имен вашего приложения.

Изменить: ответ на другие вопросы

Вы упомянули, что хотите сохранить объекты Dictionary в настройках. Как вы обнаружили, вы не можете сделать это напрямую, потому что объекты Dictionary не являются сериализуемыми. Однако вы можете легко создать свой собственный сериализуемый словарь. Пол Уэлцер имел отличный пример в своем блоге.

У вас есть несколько ссылок, которые немного грязны. Ваш исходный вопрос заключается в том, где следует сохранять "Файлы пользовательских настроек". Я почти уверен, что намерение Microsoft с помощью функций "Настройки" - это именно то, что... сохранение предпочтений пользователя, выбора макета и т.д. Это не означает, как общий репозиторий для данных приложения, хотя его можно легко злоупотреблять таким образом.

Данные хранятся в отдельных местах по уважительной причине. Некоторые настройки являются настройками приложения и доступны только для чтения. Это настройки, которые приложение должно выполнять, но не специфично для пользователя (например, URI для приложений или, возможно, ставка налога). Они хранятся в app.config.

Пользовательские настройки хранятся в обфускационном каталоге, расположенном глубоко в папке "Пользовательский документ/Настройки". Значения по умолчанию хранятся в app.config(я думаю, не могу вспомнить наверняка с головы), но любые изменения пользователя хранятся в их личной папке. Это предназначено для данных, которые изменяются от пользователя к пользователю. ( "Пользователь" я имею в виду пользователя Windows, а не пользователя вашего приложения.)

Надеюсь, это прояснило это несколько для вас. Система на самом деле довольно проста. Сначала это может показаться немного иностранным, но через несколько дней после его использования вам больше не придется думать об этом... он просто работает.

Ответ 2

При работе в качестве не-администратора или на Vista вы не можете записать в папку "Файлы программы" (или любую ее подпапку).

Правильное расположение для хранения пользовательских предпочтений (замените MyCompanyName и MyApplicationName на правильные имена, очевидно)

На диске:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"

Или в реестре под ключом:

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

Это местоположение для каждого пользователя, и они работают с пользователем, не являющимся администратором, несколькими пользователями, использующими один и тот же компьютер, быстрым переключением пользователей, терминальными службами и всеми другими способами, с которыми люди могут взаимодействовать с вашим программным обеспечением.

Если вам нужно общее местоположение для всех пользователей, то:

  • Он будет работать только тогда, когда пользователь будет запускаться как администратор
  • Он не будет надежно работать с Vista.
  • Вы должны заботиться обо всем самостоятельно (например, два пользователя, которые запускают приложение на одном компьютере одновременно с помощью быстрого переключения пользователей).

а места:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"

Или в реестре под ключом:

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

Ответ 4

лучше всего выглядит следующее:

Application.UserAppDataPath