Приветствую все! Сегодня я покажу еще один вариант сохранения настроек и данных в фаил ini, данный метод хоть и уходит в небытие, однако до сих пор используется в разработке ПО. По сути его вытеснил XML так, как по принципу работы он очень его напоминает.
Если посмотреть следующий пример, то вы поймете то о чем я говорю:
1 2 3 4 5 6 7 |
[Секция1] ключ1=значение1 ключ2= значение2 [Секция2] ключ1=значение1 ключ2= значение2 |
Весь файл разбит на секции, а каждая секция включает в себя пары «ключ=значение». Пример файла для хранения краткой информации о человеке представлен ниже:
1 2 3 |
[main] name=Василий age=20 |
В файле хранятся имя и возраст человека, оба параметра расположены в секции «main». Ниже я приведу класс, который импортирует две функции из библиотеки Windows и с их помощью получает/записывает настройки из INI-файла.
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 |
//Класс для чтения/записи INI-файлов public class INIManager { //Конструктор, принимающий путь к INI-файлу public INIManager(string aPath) { path = aPath; } //Конструктор без аргументов (путь к INI-файлу нужно будет задать отдельно) public INIManager() : this("") { } //Возвращает значение из INI-файла (по указанным секции и ключу) public string GetPrivateString(string aSection, string aKey) { //Для получения значения StringBuilder buffer = new StringBuilder(SIZE); //Получить значение в buffer GetPrivateString(aSection, aKey, null, buffer, SIZE, path); //Вернуть полученное значение return buffer.ToString(); } //Пишет значение в INI-файл (по указанным секции и ключу) public void WritePrivateString(string aSection, string aKey, string aValue) { //Записать значение в INI-файл WritePrivateString(aSection, aKey, aValue, path); } //Возвращает или устанавливает путь к INI файлу public string Path { get { return path; } set { path = value; } } //Поля класса private const int SIZE = 1024; //Максимальный размер (для чтения значения из файла) private string path = null; //Для хранения пути к INI-файлу //Импорт функции GetPrivateProfileString (для чтения значений) из библиотеки kernel32.dll [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileString")] private static extern int GetPrivateString(string section, string key, string def, StringBuilder buffer, int size, string path); //Импорт функции WritePrivateProfileString (для записи значений) из библиотеки kernel32.dll [DllImport("kernel32.dll", EntryPoint = "WritePrivateProfileString")] private static extern int WritePrivateString(string section, string key, string str, string path); } |
Обратите внимание, для использования данного кода, нужно подключить пространство имен «System.Runtime.InteropServices».
1 2 3 4 5 |
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; |
Пример использования объектов класса:
1 2 3 4 5 6 7 8 |
//Создание объекта, для работы с файлом INIManager manager = new INIManager("C:\\my.ini"); //Получить значение по ключу name из секции main string name = manager.GetPrivateString("main", "name"); //Записать значение по ключу age в секции main manager.WritePrivateString("main", "age", "21"); |