2013-05-09 2 views

답변

3

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; 
} 

또한, 당신이 대신 Posix.system의 GLib.Process의 기능 중 하나를 사용할 수 있음을 주목할 필요가 : 여기에 기본 예제입니다.

관련 문제