最近在做一个flutter自动打包工具,需要复制文件 到指定目录
//判断文件或目录是否存在 func GetFileInfo(src string) os.FileInfo { if fileInfo, e := os.Stat(src); e != nil { if os.IsNotExist(e) { return nil } return nil } else { return fileInfo } } //拷贝文件 func CopyFile(src, dst string) bool { if len(src) == 0 || len(dst) == 0 { return false } srcFile, e := os.OpenFile(src, os.O_RDONLY, os.ModePerm) if e != nil { log.Error("copyfile", e) return false } defer srcFile.Close() dst = strings.Replace(dst, "\\", "/", -1) dstPathArr := strings.Split(dst, "/") dstPathArr = dstPathArr[0 : len(dstPathArr)-1] dstPath := strings.Join(dstPathArr, "/") dstFileInfo := GetFileInfo(dstPath) if dstFileInfo == nil { if e := os.MkdirAll(dstPath, os.ModePerm); e != nil { log.Error("copyfile", e) return false } } //这里要把O_TRUNC 加上,否则会出现新旧文件内容出现重叠现象 dstFile, e := os.OpenFile(dst, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm) if e != nil { log.Error("copyfile", e) return false } defer dstFile.Close() //fileInfo, e := srcFile.Stat() //fileInfo.Size() > 1024 //byteBuffer := make([]byte, 10) if _, e := io.Copy(dstFile, srcFile); e != nil { log.Error("copyfile", e) return false } else { return true } } //拷贝目录 func CopyPath(src, dst string) bool { srcFileInfo := GetFileInfo(src) if srcFileInfo == nil || !srcFileInfo.IsDir() { return false } err := filepath.Walk(src, func(path string, info os.FileInfo, err error) error { if err != nil { log.Error("CopyPath", err) return err } relationPath := strings.Replace(path, src, "/", -1) dstPath := strings.TrimRight(strings.TrimRight(dst, "/"), "\\") + relationPath if !info.IsDir() { if CopyFile(path, dstPath) { return nil } else { return errors.New(path + " copy fail") } } else { if _, err := os.Stat(dstPath); err != nil { if os.IsNotExist(err) { if err := os.MkdirAll(dstPath, os.ModePerm); err != nil { log.Error("CopyPath", err) return err } else { return nil } } else { log.Error("CopyPath", err) return err } } else { return nil } } }) if err != nil { log.Error("CopyPath", err) return false } return true }
未经允许不得转载:开心乐窝-乐在其中 » golang目录/文件复制