Как сохранить данные программы с помощью файла *.ini C#

Приветствую все! Сегодня я покажу еще один вариант сохранения настроек и данных в фаил ini, данный метод хоть и уходит в небытие, однако до сих пор используется в разработке ПО. По сути его вытеснил XML так, как по принципу работы он очень его напоминает.

Если посмотреть следующий пример, то вы поймете то о чем я говорю:

[Секция1]
ключ1=значение1
ключ2= значение2
 
[Секция2]
ключ1=значение1
ключ2= значение2

Весь файл разбит на секции, а каждая секция включает в себя пары «ключ=значение». Пример файла для хранения краткой информации о человеке представлен ниже:

[main]
name=Василий
age=20

В файле хранятся имя и возраст человека, оба параметра расположены в секции «main». Ниже я приведу класс, который импортирует две функции из библиотеки Windows и с их помощью получает/записывает настройки из INI-файла.

//Класс для чтения/записи 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».

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

Пример использования объектов класса:

//Создание объекта, для работы с файлом
INIManager manager = new INIManager("C:\\my.ini");
 
//Получить значение по ключу name из секции main
string name = manager.GetPrivateString("main", "name"); 
 
//Записать значение по ключу age в секции main
manager.WritePrivateString("main", "age", "21");

 

Обновлено: 25.10.2018 — 12:14

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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