Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/64: Рейтинг темы: голосов - 64, средняя оценка - 4.75
 Аватар для Redglow
107 / 107 / 0
Регистрация: 06.05.2011
Сообщений: 277

Хранение пользовательских настроек

07.05.2011, 12:43. Показов 13737. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Подскажите пожалуйста, наимудрейшие. Как правильно организовать хранение пользовательских настроек приложения на С#? Есть ли готовый инструментарий для работы с ini-файлами (типа получить список параметров по имени раздела, получить значение параметра по его имени и имени раздела и т.д.)?
Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2011, 12:43
Ответы с готовыми решениями:

Апгрейд пользовательских настроек при смене версии .NET
Всем привет, столкнулся с такой проблемой: в существующем проекте на WPF необходимо было повысить версию .NET Framework (с 3.5 до...

Хранение настроек программы
Нашёл пример: http://www.vr-online.ru/content/c-sohranenie-parametrov-prilozhenija-2146 Использовал, но тут есть зависимость от версии....

Хранение настроек в HKLM
Задача состоит в назначении доступа к ключу реестре только для создателя - моей программы. Чтобы никто, кроме системы конечно же, не мог...

10
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
07.05.2011, 15:48
ini-файлы еще во времена ХР считались устаревшими и были оставлены лишь для совместимости. Для хранения настроек используйте Properties.Settings или сериализацию.
0
 Аватар для Midnayt
59 / 59 / 7
Регистрация: 07.12.2009
Сообщений: 324
07.05.2011, 16:22
Цитата Сообщение от Delog Посмотреть сообщение
ini-файлы еще во времена ХР считались устаревшими и были оставлены лишь для совместимости. Для хранения настроек используйте Properties.Settings или сериализацию.
Если можно приведите пример как сохранять и вытягивать настройки в переменные.
0
I ♥ C#
 Аватар для Delog
470 / 262 / 25
Регистрация: 07.05.2010
Сообщений: 567
07.05.2011, 17:41
В обозревателе решений два раза щелкните Settings.settings и введите название сохраняемого значения, например WindowWidth. Укажите его тип.
Чтение настроек:
C#
1
this.Width =  Properties.Settings.Default.WindowWidth;
Изменение:
C#
1
Properties.Settings.Default.WindowWidth = this.Width;
Сохранение:
C#
1
Properties.Settings.Default.Save();
1
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
08.05.2011, 07:54
Здравствуйте, как вариант я использовал сериализацию и десериализацию XML, если кому интересно могу пример сбросить.
0
 Аватар для Redglow
107 / 107 / 0
Регистрация: 06.05.2011
Сообщений: 277
08.05.2011, 09:04  [ТС]
Конечно, форум для этого и существует. Наверняка здесь найдутся те, кому пример пригодится и кто будет за это благодарен.
1
22 / 21 / 8
Регистрация: 17.02.2011
Сообщений: 399
08.05.2011, 09:15
два класса для сериализации
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
using System;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
 
 
namespace WindowsFormsApplication3
{
 
    public class ConfigParent
    {
            private ArrayList _Configuration = new ArrayList();
            private int _VersionNum;
            private string _GetCurrentWallpaperMy;
            private int _WallpaperStyleMy;
            private bool _AutoSize;
 
            [XmlAttribute]
            public int VersionNum
            {
                get { return _VersionNum; }
                set { _VersionNum = value; }
            }
 
            [XmlElement]
            public string GetCurrentWallpaperMy
            {
                get { return _GetCurrentWallpaperMy; }
                set { _GetCurrentWallpaperMy = value; }
            }
 
            [XmlElement]
            public int WallpaperStyleMy//тип подгонки изображения
            {
                get { return _WallpaperStyleMy; }
                set { _WallpaperStyleMy = value; }
            }
 
            [XmlElement]
            public bool AutoSize//включение автоподгонки изображения
            {
                get { return _AutoSize; }
                set { _AutoSize = value; }
            }
 
 
        [XmlArray]
        [XmlArrayItem(typeof(ConfigChild1))]
        public ArrayList Configuration
        {
            get { return _Configuration; }
        }
 
        public ConfigParent()
        { }
 
 
 
 
 
 
    }
 
}
 
using System;
using System.Collections;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
 
namespace WindowsFormsApplication3
{
    public class ConfigChild1
    {
        private bool _StartBegin;
        private int _CircleThis;
        private int _Count;
        private int _StringMatchNumber;
        private string _TimeCount;
 
        [XmlAttribute]
        public bool StartBegin
        {
            get { return _StartBegin; }
            set { _StartBegin = value; }
        }
 
 
        [XmlAttribute]
        public int CircleThis
        
        {
            get { return _CircleThis; }
            set { _CircleThis = value; }
        }
 
 
        [XmlAttribute]
        public int Count
        {
            get { return _Count; }
            set { _Count = value; }
        }
 
        [XmlAttribute]
        public int StringMatchNumber
        {
            get { return _StringMatchNumber; }
            set { _StringMatchNumber = value; }
        }
 
 
        [XmlAttribute]
        public string TimeCount
        {
            get { return _TimeCount; }
            set { _TimeCount = value; }
        }
 
 
 
        //два конструктора
        public ConfigChild1(bool _startBegin, int _circleThis, int _count, int _stringMatchNumber, string _timeCount)
        {
            StartBegin = _startBegin;
            CircleThis = _circleThis;
            Count = _count;
            StringMatchNumber = _stringMatchNumber;
            TimeCount = _timeCount;
 
        }
 
        //Открытый конструктор без параметров является необходимым для сериализации
        public ConfigChild1()
        { }
    }
}
запись
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            ConfigParent sBW = new ConfigParent();
            sBW.GetCurrentWallpaperMy = stringNamePathOfFile;
            sBW.WallpaperStyleMy = wallPaperStyle;
            sBW.AutoSize = autoSize;
            sBW.VersionNum = DateTime.Now.Millisecond;
            sBW.Configuration.Add(new ConfigChild1(startBegin, procedureOfRandom, count, stringMatchNumber, time));
            try
            {
                //Сериализуем полученное
                XmlWriter writer = new XmlTextWriter("config.xml", System.Text.Encoding.UTF8);
                XmlSerializer serializer = new XmlSerializer(typeof(ConfigParent));
                serializer.Serialize(writer, sBW);
                writer.Close();
            }
            catch (Exception exc)
            {
            }
чтение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 try
            {
                XmlReader reader = new XmlTextReader("config.xml");//открываем на ввод
                XmlSerializer serializer = new XmlSerializer(typeof(ConfigParent));//получаем тип объъекта
                ConfigParent sBW = (ConfigParent)serializer.Deserialize(reader);//теперь прочитан весь 
                reader.Close();
                stringNamePathOfFile = sBW.GetCurrentWallpaperMy;
                wallPaperStyle = sBW.WallpaperStyleMy;
                autoSize = sBW.AutoSize;
                ConfigChild1 sOW = (ConfigChild1)sBW.Configuration[0];
                startBegin = sOW.StartBegin;
                procedureOfRandom = sOW.CircleThis;
                stringMatchNumber = sOW.StringMatchNumber;
                count = sOW.Count;
                time = sOW.TimeCount;
           }
 
            catch (Exception exc)
            {
            }
2
87 / 85 / 10
Регистрация: 04.04.2011
Сообщений: 221
08.05.2011, 12:48
leonidSDF, зачем так усложнять класс? У вас приват-свойства и для всех идет дубликат через get|set - зачем? Никакого контроля или обработки нет, так не проще ли сделать свойства изначально public и тогда класс будет такой:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ConfigChild1
    {
        public bool StartBegin;
        public int CircleThis;
        public int Count;
        public int StringMatchNumber;
        public string TimeCount;
 
        //два конструктора
        public ConfigChild1(bool _startBegin, int _circleThis, int _count, int _stringMatchNumber, string _timeCount)
        {
            StartBegin = _startBegin;
            CircleThis = _circleThis;
            Count = _count;
            StringMatchNumber = _stringMatchNumber;
            TimeCount = _timeCount;
 
        }
 
        //Открытый конструктор без параметров является необходимым для сериализации
        public ConfigChild1()
        { }
    }
0
 Аватар для dzjundzja88
289 / 234 / 32
Регистрация: 09.02.2011
Сообщений: 435
08.05.2011, 13:01
Можно использовать файл с расширением *.config
Вот его структура
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="host" value="174.142.53.213" />
    <add key="port" value="4000" />
    <add key="first_login" value="0" />
    <add key="folder_directory" value="C:\\" />
    <add key="open_folder_directory" value="C:" />
  </appSettings>  
</configuration>
А с кода к нему обращаться так
C#
1
2
3
4
5
6
7
8
9
10
      public static string folder_directory; //хранит директорию из конфиг. файла(корневой катаог для хранения сканов)
      public static string open_folder_directory; //хранит директорию из конфиг. файла (корневой каталог для openFileDialog)
 
 
            //считываем с конфиг. файла директорию для создания папок со сканами
            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = Directory.GetCurrentDirectory() + "\\ixvMyCabinet.config";
            Configuration settings = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
            folder_directory = Convert.ToString(settings.AppSettings.Settings["folder_directory"].Value);         
            open_folder_directory = Convert.ToString(settings.AppSettings.Settings["open_folder_directory"].Value);
1
14 / 14 / 1
Регистрация: 23.06.2011
Сообщений: 34
24.08.2011, 13:26
записывал в обычный текстовой файл и читал оттуда
1
0 / 0 / 0
Регистрация: 24.01.2020
Сообщений: 2
17.04.2020, 16:17
delog подробнее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2020, 16:17
Помогаю со студенческими работами здесь

Наиболее надежное хранение настроек и пароля
Здравствуйте друзья. Как будет правильно (более грамотно, безопасно) реализовать хранение настроек программы после нажатия к примеру...

Хранение большого количества настроек - нужна подсказка
Пишу программу, которая требует хранения множества настроек. Я их разделил на несколько типов: 1) размер и положение окна, размер...

Хранение нескольких вариантов (профилей) настроек программы
Доброго времени. У меня появилась задача хранить несколько профилей настроек программы, и я не совсем уверен как бы это реализовать так что...

Универсальное хранение настроек, при изменении, обновлении
Привет, а как можно хранить настройки, это положение несколько сотен контролов, данные для сервера и т.д. С обновлением программы,...

Сериализация или парсить xml? (хранение настроек приложения)
Всем привет! Подскажите, как правильно хранить настройки? Можно: Написать свой парсер и хранить в txt\ini Хранить прямо в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru