是否有一种简单的方法可以复制目录? 我具有以下功能:
err = CopyDir("sourceFolder","destinationFolder")
到目前为止没有任何工作,包括github.com/cf-guardian/guardian/kernel/fileutils之类的库
要注意的一件事是,我需要保留目录结构,包括sourceFolder本身,而不仅仅是复制文件夹的所有内容。
答案 0 :(得分:2)
This package似乎完全可以满足您的要求,请尝试一下。
自述文件:
err := Copy("your/source/directory", "your/destination/directory")
答案 1 :(得分:1)
一种简单而懒惰的方法是使用系统的copy命令。此示例仅适用于使用cp命令的系统(因此不适用于Windows)
func CopyDir(src, dst string) error {
cmd := exec.Command("cp", "a")
log.Printf("Running cp -a")
return cmd.Run()
}
保存目录不是那么容易实现,因此可以使用系统程序。但是该解决方案并非在所有系统上都有效,因为它需要一个外部程序。我只会将其用于内部目的。
答案 2 :(得分:1)
我想出了一个相对较短的答案,该答案使用了1
的{{1}}方法:
CombineLatestStream.list
答案 3 :(得分:0)
我相信docker实现可以看作是处理极端情况的完整解决方案: https://github.com/moby/moby/blob/8e610b2b55bfd1bfa9436ab110d311f5e8a74dcb/daemon/graphdriver/copy/copy.go
有以下优点:
但是由于大量导入,您的微型应用程序变得非常庞大。
我尝试结合几种解决方案,但仅使用stdlib:
public function logout() {
$this->load->helper('url');
$this->load->library('session');
$session_data = array(
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data',
'data' => 'data'
);
$this->session->set_userdata($session_data);
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->unset_userdata('data');
$this->session->sess_destroy();
redirect('http://localhost/dir/dir1/dir2/index.php/Controller/loginview', 'refresh');
}
答案 4 :(得分:0)
这也可能是一个解决方案:
可在 github.com/floscodes/golang-tools 上获得
import (
"fmt"
"io/ioutil"
"os"
)
func CopyDir(src string, dest string) error {
if dest[:len(src)] == src {
return fmt.Errorf("Cannot copy a folder into the folder itself!")
}
f, err := os.Open(src)
if err != nil {
return err
}
file, err := f.Stat()
if err != nil {
return err
}
if !file.IsDir() {
return fmt.Errorf("Source " + file.Name() + " is not a directory!")
}
err = os.Mkdir(dest, 0755)
if err != nil {
return err
}
files, err := ioutil.ReadDir(src)
if err != nil {
return err
}
for _, f := range files {
if f.IsDir() {
err = CopyDir(src+"/"+f.Name(), dest+"/"+f.Name())
if err != nil {
return err
}
}
if !f.IsDir() {
content, err := ioutil.ReadFile(src + "/" + f.Name())
if err != nil {
return err
}
err = ioutil.WriteFile(dest+"/"+f.Name(), content, 0755)
if err != nil {
return err
}
}
}
return nil
}