Библиотека сайта rus-linux.net
Возможности тулкита GTK+ и сопутствующих библиотек
Автор: А.Панин
Дата публикации: 3 декабря 2014 г.
Механизм для работы с файлами, содержащими пары ключ-значение
3. Открытие и закрытие файла
GKeyFile. Этот объект создается с помощью функции g_key_file_new().
GKeyFile *g_key_file_new(void);
g_key_file_load_from_file():
gboolean g_key_file_load_from_file(GKeyFile *key_file,
const gchar *file,
GKeyFileFlags flags,
GError **error);
В качестве аргумента flags может быть передана битовая маска из флагов операции открытия файла. Флаг G_KEY_FILE_KEEP_COMMENTS может быть использован для загрузки комментариев, а флаг G_KEY_FILE_KEEP_TRANSLATIONS - для загрузки локализованных значений. В том случае, если вы не используете подобные данные (а в случае сохранения данных конфигурации приложения они наверняка не используются), вы можете передать флаг G_KEY_FILE_NONE. В том случае, если вас интересует сообщение об ошибке в случае неудачной загрузки данных из файла, вы также можете передать указатель на объект ошибки типа GError, в противном случае следует передавать значение NULL.
XDG_DATA_HOME и XDG_DATA_DIRS соответственно, может быть использована функция g_key_file_load_from_data_dirs():
gboolean g_key_file_load_from_data_dirs(GKeyFile *key_file,
const gchar *file,
gchar **full_path,
GKeyFileFlags flags,
GError **error);
В случае использования данной функции имя файла должно передаваться в качестве аргумента file, а в случае удачного открытия файла полный путь к нему будет возвращен с помощью аргумента full_path.
g_key_file_load_from_dirs(), отличающаяся от приведенной выше только тем, что разработчик может самостоятельно задать директории для поиска файлов:
gboolean g_key_file_load_from_dirs(GKeyFile *key_file,
const gchar *file,
const gchar **search_dirs,
gchar **full_path,
GKeyFileFlags flags,
GError **error);
В данном случае список директорий следует передавать в качестве аргумента search_dirs.
g_key_file_load_from_data(), позволяющей загружать содержимое файла из памяти. Она может быть полезна, к примеру, в том случае, если файл отображается в память.
gboolean g_key_file_load_from_data(GKeyFile *key_file,
const gchar *data,
gsize length,
GKeyFileFlags flags,
GError **error);
Для загрузки данных файла из памяти следует передать адрес фрагмента памяти с данными файла в качестве аргумента data, а длину этого фрагмента - в качестве аргумента length. Значение аргумента length может быть равно -1 в том случае, если расположенное в памяти строковое представление файла завершается нулевым символом.
g_key_file_to_data(), которая возвращает строковое представление файла и длину этого представления:
gchar *g_key_file_to_data(GKeyFile *key_file,
gsize *length,
GError **error);
Данная функция используется главным образом в момент сохранения данных в файл на диске совместно с функцией для сохранения данных из памяти в файл g_file_set_contents(), о которой будет сказано позднее. Возвращаемое строковое представление сохраняется в резервируемом фрагменте памяти, поэтому эта память должна быть освобождена с помощью функции g_free() после того, как строковое представление будет сохранено в файле.
g_key_file_ref() и g_key_file_unref() соответственно.
GKeyFile *g_key_file_ref(GKeyFile *key_file); void g_key_file_unref(GKeyFile *key_file);
Сразу же после создания объекта значение счетчика ссылок равно 1, а в случае равенства значения счетчика ссылок 0 происходит уничтожение объекта.
g_key_file_free().
void g_key_file_free(GKeyFile *key_file);
g_key_file_set_list_separator():
void g_key_file_set_list_separator(GKeyFile *key_file,
gchar separator);
Обычно в качестве разделителей используются символы ";" или ",".
4. Работа с данными
g_key_file_get_groups():
gchar **g_key_file_get_groups(GKeyFile *key_file,
gsize *length);
g_strfreev(). С помощью аргумента length будет возвращено значение длины массива, впрочем, без него вполне можно обойтись, передав значение NULL. В этом случае для обхода массива строк groups и вывода каждой из строк может быть использован следующий код:
gint i = 0;
while (groups[i] != NULL) {
g_printf("%s\n", groups[i]);
}
g_key_file_get_keys():
gchar **g_key_file_get_keys(GKeyFile *key_file,
const gchar *group_name,
gsize *length,
GError **error);
Название группы должно передаваться с помощью аргумента group_name. В случае отсутствия указанной группы наряду с результирующим значением NULL будет возвращена ошибка с идентификатором G_KEY_FILE_ERROR_GROUP_NOT_FOUND.
g_key_file_has_group() и g_key_file_has_key() соответственно:
gboolean g_key_file_has_group(GKeyFile *key_file,
const gchar *group_name);
gboolean g_key_file_has_key(GKeyFile *key_file,
const gchar *group_name,
const gchar *key,
GError **error);
Название группы также передается с помощью аргумента group_name, название ключа - с помощью аргумента key. Данные имена аргументов используются во всех функциях данного класса.
- Функции для получения значений.
- Функции для установки значений.
- Функции для удаления значений.
Рассмотрим функции для установки значений и соответствующие им функции для получения значений. Вы можете познакомиться с полными описаниями этих функций, обратившись либо к документации API в сети, либо к приложению для просмотра локальной копии документации API под названием Devhelp.
| Функция для установки значения | Функция для получения значения | Описание |
|---|---|---|
g_key_file_get_value() |
g_key_file_set_value() |
Установка/получение необработанного строкового представления значения |
g_key_file_get_string() |
g_key_file_set_string() |
Установка/получение строкового значения с обработкой специальных последовательностей символов |
g_key_file_get_locale_string() |
g_key_file_set_locale_string() |
Установка/получение строкового значения для заданной локализации |
g_key_file_get_boolean() |
g_key_file_set_boolean() |
Установка/получение логического значения |
g_key_file_get_integer() |
g_key_file_set_integer() |
Установка/получение знакового целочисленного значения |
g_key_file_get_int64() |
g_key_file_set_int64() |
Установка/получение 64-битного знакового целочисленного значения |
g_key_file_get_uint64() |
g_key_file_set_uint64() |
Установка/получение 64-битного беззнакового целочисленного значения |
g_key_file_get_double() |
g_key_file_set_double() |
Установка/получение значения с плавающей точкой |
g_key_file_get_string_list() |
g_key_file_set_string_list() |
Установка/получение массива строковых значений |
g_key_file_get_locale_string_list() |
g_key_file_set_locale_string_list() |
Установка/получение массива строковых значений для заданной локализации |
g_key_file_get_boolean_list() |
g_key_file_set_boolean_list() |
Установка/получение массива логических значений |
g_key_file_get_integer_list() |
g_key_file_set_integer_list() |
Установка/получение массива целочисленных значений |
g_key_file_get_double_list() |
g_key_file_set_double_list() |
Установка/получение массива значений с плавающей точкой |
g_key_file_get_comment() |
g_key_file_set_comment() |
Установка/получение комментария для заданного ключа, заданной группы или всего файла |
В том случае, если при использовании функций для установки значений не обнаруживается заданного ключа или заданной группы, они создаются автоматически.
| Функция | Описание |
|---|---|
g_key_file_remove_group() |
Удаление заданной группы вместе с ключами и значениями |
g_key_file_remove_key() |
Удаление заданного ключа из заданной группы вместе с его значением |
g_key_file_remove_comment() |
Удаление комментария, соответствующего заданному ключу, заданной группе или всему файлу |
Продолжение статьи : 5. Пример использования.
