INI-файлы: создание, чтение, запись...

 
0
 
C++
ava
chipset | 31.01.2005, 05:34
 Взято с www.codeguru.com, автор класса - Koray Gecici

MFC
Скачав и добавив в проект файлы CIniEx.h и CIniEx.cpp (ссылка ниже), можно открывать/создавать произвольное количество ini-файлов, сохранять и читать значения, получать список секций ini-файла и список ключей внутри любой секции, удалять ключ, секцию или содержимое ini-файла целиком -- всё это умеет класс CIniEx. Подробнее по каждому пункту:

1) открыть ini-файл можно тремя способами:
CIniEx  ini1, ini2, ini3;
ini1.Open("my_settings1.ini");
ini2.OpenAtExeDirectory("some2.ini");
ini3.OpenAtWindowsDirectory("another3.ini");

У каждого варианта функции Open есть несколько необязательных параметров-настроек, названия которых говорят сами за себя:
 BOOL CIniEx::Open(LPCSTR pFileName, 
             [b]BOOL writeWhenChange /*=TRUE*/,
             BOOL createIfNotExist /*=TRUE*/,
             BOOL noCaseSensitive /*=TRUE*/,
             BOOL makeBackup /*=FALSE*/[/b])

Закрывается файл автоматически, в деструкторе класса CIniEx

2) добавление или изменение значения ключа в ini-файле:
ini1.SetValue("Section AAA", "Key Name", "Key Value");
ini1.SetValue("Секция БББ", "Имя Ключа", "Значение Ключа");

Если секция или ключ не существовали, то они будут созданы автоматически. Для записи в файл числовых значений, нужно перевести их в строковый формат (например, используя функции IntToStr, FloatToStr из нашего FAQ по С++). Можно также помещать ключи в ini-файл без указания секции -- такие ключи будут добавляться в так называемую "глобальную" (безымянную) секцию:
ini1.SetValue("Global Key Name", "1234");


3) как получить список секций и ключей в секциях:
// перечислим все секции и ключи в файле "1.ini":
CIniEx file;
file.OpenAtExeDirectory("1.ini");
CStringArray sections; // динамический массив MFC для списка секций
file.GetSections(sections);
for(int i=0; i<sections.GetSize(); i++)
{
   CString section = sections[i];
   CStringArray keys; // динамический массив для списка ключей в секции
   file.GetKeysInSection(section, keys);
   for(int j=0; j<keys.GetSize(); j++)
   {
      CString key = keys[j]; // key равен имени ключа в секции section
   }
}


4) как получить значение по имени ключа:
CString s = ini1.GetValue("Section AAA", "Key Name");

можно также читать значения ключей, расположенных в "глобальной" секции:
CString s = ini1.GetValue("Global Key Name");


5) как удалить ключ, секцию, всё содержимое ini-файла:
// удаление ключа из секции
ini1.RemoveKey("Section AAA", "Key Name");
// удаление ключа из "глобальной" секции
ini1.RemoveKey("Global Key Name");
// удаление секции целиком
ini1.RemoveSection("Section AAA");
// очистка ini-файла
ini1.ResetContent();


Ещё одна возможность (полезная или нет, решайте сами) - это возможность автоматического создания backup-файла при сохранении ini-файла. За это отвечает соответствующий необязательный параметр функции Open; имя backup-файла можно настроить с помощью специальной функции SetBackupFileName(CString fileName)
Ответы (0)

Комментарии не добавлены

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  chipset
advanced
Отправить