`GKeyFile` parses .
ini-like config files.
`GKeyFile` lets you parse, edit or create files containing groups of key-value pairs, which we call ‘key files’ for lack of a better
name. Several freedesktop.org specifications use key files. For example, the
Desktop Entry Specification and the
Icon Theme Specification.
The syntax of key files is described in detail in the
Desktop Entry Specification, here is a
quick summary: Key files consists of groups of key-value pairs, interspersed with comments.
```txt
this is just an example
there can be comments before the first group
[First Group]
Name=Key File Example\tthis value shows\nescaping
localized strings are stored in multiple key-value pairs
Welcome=Hello Welcome[de]=Hallo Welcome[fr_FR]=Bonjour Welcome[it]=Ciao
[Another Group]
Numbers=2;20;-200;0
Booleans=true;false;true;true ```
Lines beginning with a `#` and blank lines are considered comments.
Groups are started by a header line containing the group name enclosed in `[` and `]`, and ended implicitly by the start of the next
group or the end of the file. Each key-value pair must be contained in a group.
Key-value pairs generally have the form `key=value`, with the exception of localized strings, which have the form `key[locale]=value`,
with a locale identifier of the form `lang_COUNTRY@MODIFIER` where `COUNTRY` and `MODIFIER` are optional. As a special case, the locale
`C` is associated with the untranslated pair `key=value` (since GLib 2.84). Space before and after the `=` character is ignored. Newline,
tab, carriage return and backslash characters in value are escaped as `\n`, `\t`, `\r`, and `\\\\`, respectively. To preserve leading
spaces in values, these can also be escaped as `\s`.
Key files can store strings (possibly with localized variants), integers, booleans and lists of these. Lists are separated by a separator
character, typically `;` or `,`. To use the list separator character in a value in a list, it has to be escaped by prefixing it with a
backslash.
This syntax is obviously inspired by the .ini files commonly met on Windows, but there are some important differences:
- .ini files use the `;` character to begin comments, key files use the `#` character.
- Key files do not allow for ungrouped keys meaning only comments can precede the first group.
- Key files are always encoded in UTF-8.
- Key and Group names are case-sensitive. For example, a group called `[GROUP]` is a different from `[group]`.
- .ini files don’t have a strongly typed boolean entry type, they only have `GetProfileInt()`. In key files, only `true` and `false`
(in lower case) are allowed.
Note that in contrast to the Desktop Entry
Specification, groups in key files may contain the same key multiple times; the last entry wins. Key files may also contain multiple
groups with the same name; they are merged together. Another difference is that keys and group names in key files are not restricted to
ASCII characters.
Here is an example of loading a key file and reading a value:
```c g_autoptr(GError) error = NULL; g_autoptr(GKeyFile) key_file = g_key_file_new ();
if (!g_key_file_load_from_file (key_file, "key-file.ini", flags, &error)) { if (!g_error_matches (error, G_FILE_ERROR,
G_FILE_ERROR_NOENT)) g_warning ("Error loading key file: s", error->message); return; }
g_autofree gchar *val = g_key_file_get_string (key_file, "Group Name", "SomeKey", &error); if (val == NULL && !
g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) { g_warning ("Error finding key in key file:
s", error->message); return; } else if (val == NULL) { // Fall back to a default value. val =
g_strdup ("default-value"); } ```
Here is an example of creating and saving a key file:
```c g_autoptr(GKeyFile) key_file = g_key_file_new (); const gchar *val = …; g_autoptr(GError) error = NULL;
g_key_file_set_string (key_file, "Group Name", "SomeKey", val);
// Save as a file. if (!g_key_file_save_to_file (key_file, "key-file.ini", &error)) { g_warning ("Error saving key file:
s", error->message); return; }
// Or store to a GBytes for use elsewhere. gsize data_len; g_autofree guint8 *data = (guint8 *) g_key_file_to_data (key_file, &
data_len, &error); if (data == NULL) { g_warning ("Error saving key file: s", error->message);
return; } g_autoptr(GBytes) bytes = g_bytes_new_take (g_steal_pointer (&data), data_len); ```
- public bool get_boolean (string group_name, string key) throws KeyFileError
Returns the value associated with key under
group_name as a boolean.
- public bool[] get_boolean_list (string group_name, string key) throws KeyFileError
Returns the values associated with key under
group_name as booleans.
- public string get_comment (string? group_name, string? key) throws KeyFileError
Retrieves a comment above key from group_name
.
- public double get_double (string group_name, string key) throws KeyFileError
Returns the value associated with key under
group_name as a double.
- public double[] get_double_list (string group_name, string key) throws KeyFileError
Returns the values associated with key under
group_name as doubles.
- public string[] get_groups ()
Returns all groups in the key file loaded with
this.
- public int64 get_int64 (string group_name, string key) throws KeyFileError
Returns the value associated with key under
group_name as a signed 64-bit integer.
- public int get_integer (string group_name, string key) throws KeyFileError
Returns the value associated with key under
group_name as an integer.
- public int[] get_integer_list (string group_name, string key) throws KeyFileError
Returns the values associated with key under
group_name as integers.
- public string[] get_keys (string group_name) throws KeyFileError
Returns all keys for the group name group_name.
- public string? get_locale_for_key (string group_name, string key, string? locale = null)
Returns the actual locale which the result of [method@GLib.
- public string get_locale_string (string group_name, string key, string? locale = null) throws KeyFileError
Returns the value associated with key under
group_name translated in the given locale if available.
- public string[] get_locale_string_list (string group_name, string key, string? locale = null) throws KeyFileError
Returns the values associated with key under
group_name translated in the given locale if available.
- public string get_start_group ()
Returns the name of the start group of the file.
- public string get_string (string group_name, string key) throws KeyFileError
Returns the string value associated with key under
group_name.
- public string[] get_string_list (string group_name, string key) throws KeyFileError
Returns the values associated with key under
group_name.
- public uint64 get_uint64 (string group_name, string key) throws KeyFileError
Returns the value associated with key under
group_name as an unsigned 64-bit integer.
- public string get_value (string group_name, string key) throws KeyFileError
Returns the raw value associated with key under
group_name.
- public bool has_group (string group_name)
Looks whether the key file has the group group_name.
- public bool has_key (string group_name, string key) throws KeyFileError
Looks whether the key file has the key key in the group
group_name.
- public bool load_from_bytes (Bytes bytes, KeyFileFlags flags) throws KeyFileError
Loads a key file from the data in bytes into an empty [
struct@GLib.
- public bool load_from_data (string data, size_t length, KeyFileFlags flags) throws KeyFileError
Loads a key file from memory into an empty [struct@GLib.
- public bool load_from_data_dirs (string file, out string full_path, KeyFileFlags flags) throws KeyFileError, FileError
Looks for a key file named file in the paths returned
from [func@GLib.
- public bool load_from_dirs (string file, string[] search_dirs, out string full_path, KeyFileFlags flags) throws KeyFileError, FileError
Looks for a key file named file in the paths specified in
search_dirs, loads the file into this and returns the file’s full path in
full_path.
- public bool load_from_file (string file, KeyFileFlags flags) throws KeyFileError, FileError
Loads a key file into an empty [struct@GLib.
- public void remove_comment (string group_name, string key) throws KeyFileError
Removes a comment above key from group_name.
- public void remove_group (string group_name) throws KeyFileError
Removes the specified group, group_name, from the key
file.
- public void remove_key (string group_name, string key) throws KeyFileError
Removes key in group_name from the key file.
- public bool save_to_file (string filename) throws FileError
Writes the contents of this to
filename using [func@GLib.
- public void set_boolean (string group_name, string key, bool value)
Associates a new boolean value with key under
group_name.
- public void set_boolean_list (string group_name, string key, bool[] list)
Associates a list of boolean values with key under
group_name.
- public void set_comment (string? group_name, string? key, string comment) throws KeyFileError
Places a comment above key from group_name.
- public void set_double (string group_name, string key, double value)
Associates a new double value with key under
group_name.
- public void set_double_list (string group_name, string key, double[] list)
Associates a list of double values with key under
group_name.
- public void set_int64 (string group_name, string key, int64 value)
Associates a new integer value with key under
group_name.
- public void set_integer (string group_name, string key, int value)
Associates a new integer value with key under
group_name.
- public void set_integer_list (string group_name, string key, int[] list)
Associates a list of integer values with key under
group_name.
- public void set_list_separator (char separator)
Sets the character which is used to separate values in lists.
- public void set_locale_string (string group_name, string key, string locale, string str)
Associates a string value for key and locale
under group_name.
- public void set_locale_string_list (string group_name, string key, string locale, string[] list)
Associates a list of string values for key and
locale under group_name.
- public void set_string (string group_name, string key, string str)
Associates a new string value with key under
group_name.
- public void set_string_list (string group_name, string key, string[] list)
Associates a list of string values for key under
group_name.
- public void set_uint64 (string group_name, string key, uint64 value)
Associates a new integer value with key under
group_name.
- public void set_value (string group_name, string key, string value)
Associates a new value with key under group_name
.
- public string to_data (out size_t length = null, out Error error = null)
Outputs this as a string.