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

Functionality for manipulating basic metadata for files.

FileInfo implements methods for getting information that all files should contain, and allows for manipulation of extended attributes.

See GFileAttribute for more information on how GIO handles file attributes.

To obtain a FileInfo for a File, use query_info (or its async variant). To obtain a FileInfo for a file input or output stream, use query_info or query_info (or their async variants).

To change the actual attributes of a file, you should then set the attribute in the FileInfo and call set_attributes_from_info or 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 set_size. You may call query_settable_attributes and query_writable_namespaces to discover the settable attributes of a particular file at runtime.

The direct accessors, such as get_name, are slightly more optimized than the generic attribute accessors, such as 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 FileInfo. Use has_attribute or list_attributes to check what attributes are specified for a FileInfo.

FileAttributeMatcher allows for searching through a FileInfo 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: