Object Hierarchy:

GLib.FileInfo GLib.FileInfo GLib.FileInfo GLib.Object GLib.Object GLib.Object->GLib.FileInfo


[ CCode ( type_id = "g_file_info_get_type ()" ) ]
public sealed class FileInfo : Object

Stores information about a file system object referenced by a [iface@Gio.


Functionality for manipulating basic metadata for files. `GFileInfo` implements methods for getting information that all files should contain, and allows for manipulation of extended attributes.

See [file-attributes.html](file attributes) for more information on how GIO handles file attributes.

To obtain a `GFileInfo` for a [iface@Gio.File], use [method@Gio.File.query_info] (or its async variant). To obtain a `GFileInfo` for a file input or output stream, use [method@Gio.FileInputStream.query_info] or [method@Gio.FileOutputStream.query_info] (or their async variants).

To change the actual attributes of a file, you should then set the attribute in the `GFileInfo` and call [ method@Gio.File.set_attributes_from_info] or [method@Gio.File.set_attributes_async] on a `GFile`.

However, not all attributes can be changed in the file. For instance, the actual size of a file cannot be changed via [ method@Gio.FileInfo.set_size]. You may call [method@Gio.File.query_settable_attributes] and [method@Gio.File.query_writable_namespaces] to discover the settable attributes of a particular file at runtime.

The direct accessors, such as [method@Gio.FileInfo.get_name], are slightly more optimized than the generic attribute accessors, such as [ method@Gio.FileInfo.get_attribute_byte_string].This optimization will matter only if calling the API in a tight loop.

It is an error to call these accessors without specifying their required file attributes when creating the `GFileInfo`. Use [ method@Gio.FileInfo.has_attribute] or [method@Gio.FileInfo.list_attributes] to check what attributes are specified for a `GFileInfo`.

[struct@Gio.FileAttributeMatcher] allows for searching through a `GFileInfo` for attributes.

Example: List all files in a directory, sync:

private void list_children (File file, string space = "", Cancellable? cancellable = null) throws Error {
FileEnumerator enumerator = file.enumerate_children (

FileInfo info = null;
while (cancellable.is_cancelled () == false && ((info = enumerator.next_file (cancellable)) != null)) {
if (info.get_file_type () == FileType.DIRECTORY) {
File subdir = file.resolve_relative_path (info.get_name ());
list_children (subdir, space + " ", cancellable);
} else {
print ("%s%s\n", space, info.get_name ());
print ("%s %s\n", space, info.get_file_type ().to_string ());
print ("%s %s\n", space, info.get_is_symlink ().to_string ());
print ("%s %s\n", space, info.get_is_hidden ().to_string ());
print ("%s %s\n", space, info.get_is_backup ().to_string ());
print ("%s %"+int64.FORMAT+"\n", space, info.get_size ());

if (cancellable.is_cancelled ()) {
throw new IOError.CANCELLED ("Operation was cancelled");

public static int main (string[] args) {
if (args.length != 2) {
print ("%s [DIRECTORY]\n", args[0]);
return 0;

File file = File.new_for_commandline_arg (args[1]);

try {
list_children (file, "", new Cancellable ());
} catch (Error e) {
print ("Error: %s\n", e.message);
return 0;

return 0;

valac --pkg gio-2.0 GLib.File.enumerate_children.vala

Example: List all files in a directory, async:

public static int main (string[] args) {
File file = File.new_for_path (".");
MainLoop loop = new MainLoop ();

file.enumerate_children_async.begin ("standard::*", FileQueryInfoFlags.NOFOLLOW_SYMLINKS, Priority.DEFAULT, null, (obj, res) => {
try {
FileEnumerator enumerator = file.enumerate_children_async.end (res);
FileInfo info;
while ((info = enumerator.next_file (null)) != null) {
print ("%s\n", info.get_name ());
print ("\t%s\n", info.get_file_type ().to_string ());
print ("\t%s\n", info.get_is_symlink ().to_string ());
print ("\t%s\n", info.get_is_hidden ().to_string ());
print ("\t%s\n", info.get_is_backup ().to_string ());
print ("\t%"+int64.FORMAT+"\n", info.get_size ());
} catch (Error e) {
print ("Error: %s\n", e.message);

loop.quit ();
}); ();
return 0;

valac --pkg gio-2.0 GLib.File.enumerate_children_async.vala

Namespace: GLib
Package: gio-2.0


Creation methods:


Inherited Members: