|
|
@@ -0,0 +1,108 @@
|
|
|
+package client
|
|
|
+
|
|
|
+import (
|
|
|
+ "os"
|
|
|
+ "fmt"
|
|
|
+ "errors"
|
|
|
+ "time"
|
|
|
+ "strings"
|
|
|
+ "path/filepath"
|
|
|
+ "io"
|
|
|
+)
|
|
|
+
|
|
|
+/**
|
|
|
+ * 拷贝文件夹,同时拷贝文件夹中的文件
|
|
|
+ * @param srcPath 需要拷贝的文件夹路径: D:/test
|
|
|
+ * @param destPath 拷贝到的位置: D:/backup/
|
|
|
+ */
|
|
|
+func CopyDir(srcPath string, destPath string) error {
|
|
|
+ //检测目录正确性
|
|
|
+ if srcInfo, err := os.Stat(srcPath); err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return err
|
|
|
+ } else {
|
|
|
+ if !srcInfo.IsDir() {
|
|
|
+ e := errors.New("srcPath不是一个正确的目录!")
|
|
|
+ fmt.Println(e.Error())
|
|
|
+ return e
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if destInfo, err := os.Stat(destPath); err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return err
|
|
|
+ } else {
|
|
|
+ if !destInfo.IsDir() {
|
|
|
+ e := errors.New("destInfo不是一个正确的目录!")
|
|
|
+ fmt.Println(e.Error())
|
|
|
+ return e
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //加上拷贝时间:不用可以去掉
|
|
|
+ destPath = destPath + "_" + time.Now().Format("20060102150405")
|
|
|
+
|
|
|
+ err := filepath.Walk(srcPath, func(path string, f os.FileInfo, err error) error {
|
|
|
+ if f == nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if !f.IsDir() {
|
|
|
+ path := strings.Replace(path, "\\", "/", -1)
|
|
|
+ destNewPath := strings.Replace(path, srcPath, destPath, -1)
|
|
|
+ fmt.Println("复制文件:" + path + " 到 " + destNewPath)
|
|
|
+ copyFile(path, destNewPath)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ fmt.Printf(err.Error())
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|
|
|
+
|
|
|
+//生成目录并拷贝文件
|
|
|
+func copyFile(src, dest string) (w int64, err error) {
|
|
|
+ srcFile, err := os.Open(src)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer srcFile.Close()
|
|
|
+ //分割path目录
|
|
|
+ destSplitPathDirs := strings.Split(dest, "/")
|
|
|
+
|
|
|
+ //检测时候存在目录
|
|
|
+ destSplitPath := ""
|
|
|
+ for index, dir := range destSplitPathDirs {
|
|
|
+ if index < len(destSplitPathDirs)-1 {
|
|
|
+ destSplitPath = destSplitPath + dir + "/"
|
|
|
+ b, _ := pathExists(destSplitPath)
|
|
|
+ if b == false {
|
|
|
+ fmt.Println("创建目录:" + destSplitPath)
|
|
|
+ //创建目录
|
|
|
+ err := os.Mkdir(destSplitPath, os.ModePerm)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ dstFile, err := os.Create(dest)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer dstFile.Close()
|
|
|
+
|
|
|
+ return io.Copy(dstFile, srcFile)
|
|
|
+}
|
|
|
+
|
|
|
+//检测文件夹路径时候存在
|
|
|
+func pathExists(path string) (bool, error) {
|
|
|
+ _, err := os.Stat(path)
|
|
|
+ if err == nil {
|
|
|
+ return true, nil
|
|
|
+ }
|
|
|
+ if os.IsNotExist(err) {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ return false, err
|
|
|
+}
|