我是 Vala 的新手,所以这可能是一个愚蠢的问题。
根据 gimpnet 上的 #vala,不可能使用Glib.File.copy递归复制目录。目前我正在使用:
Posix.system("cp -r absolutesource absolutedestination")
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?
正如我在 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;
}
Run Code Online (Sandbox Code Playgroud)
此外,值得注意的是,您可能希望使用GLib.Process中的函数之一而不是 Posix.system。