Как я уже говорил в IRC, вы можете просто написать функцию, чтобы сделать это самостоятельно, вызвав GLib.File.copy
для каждого файла, который вы хотите скопировать. Вот простой пример:
public bool copy_recursive (GLib.File src, GLib.File dest, GLib.FileCopyFlags flags = GLib.FileCopyFlags.NONE, GLib.Cancellable? cancellable = null) throws GLib.Error {
GLib.FileType src_type = src.query_file_type (GLib.FileQueryInfoFlags.NONE, cancellable);
if (src_type == GLib.FileType.DIRECTORY) {
dest.make_directory (cancellable);
src.copy_attributes (dest, flags, cancellable);
string src_path = src.get_path();
string dest_path = dest.get_path();
GLib.FileEnumerator enumerator = src.enumerate_children (GLib.FileAttribute.STANDARD_NAME, GLib.FileQueryInfoFlags.NONE, cancellable);
for (GLib.FileInfo? info = enumerator.next_file (cancellable) ; info != null ; info = enumerator.next_file (cancellable)) {
copy_recursive (
GLib.File.new_for_path (GLib.Path.build_filename (src_path, info.get_name())),
GLib.File.new_for_path (GLib.Path.build_filename (dest_path, info.get_name())),
flags,
cancellable);
}
} else if (src_type == GLib.FileType.REGULAR) {
src.copy (dest, flags, cancellable);
}
return true;
}
Кроме того, стоит отметить, что вы можете использовать одну из функций в GLib.Process вместо Posix.system.