gpt4 book ai didi

file-io - 如何使用 vala 递归复制目录?

转载 作者:行者123 更新时间:2023-12-01 12:45:28 25 4
gpt4 key购买 nike

我是 Vala 的新手,所以这可能是个愚蠢的问题。

根据 gimpnet 上的#vala,使用 Glib.File.copy 递归复制目录是不可能的。目前我正在使用:

Posix.system("cp -r absolutesource absolutedestination")

有更好的方法吗?

最佳答案

正如我在 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。

关于file-io - 如何使用 vala 递归复制目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16453739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com