Работа с INI-файлами в C#
В этой статье я хочу рассказать и показать как можно работать с INI-файлами в программах, написанных на C#. На самом деле, сейчас INI-файлы используются достаточно редко. Точнее они используются редко в разрабатываемых сейчас программах, но есть огромное количество программ, который были написаны весьма давно, в пору популярности INI-файлов. И Вам может даже придется сопровождать такие программы (как мне в своё время), или же Вам нужно будет организовать доступ из своей программы к INI-файлу, который создается другой системой. В любом случае, умение работать с INI-файлами является еще актуальной задачей…
И так, для начала, вкратце, расскажу о том, что же такое INI-файлы. В INI-файлах некоторые приложения хранят свои настройки. В общих чертах, формат INI-файла выглядит так:
[Секция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», вот в него нужно добавить строчку «using 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");
Как видите, тоже нет ничего сложного. Такой класс, можно включить в отдельную dll и использовать в разный проектах.
Источник: http://plssite.ru/