package utils import ( "fmt" "io" "os" "os/exec" "path/filepath" ) type FileUtils struct{} var File = &FileUtils{} func (f *FileUtils) CopyDir(src, dst string) error { // 获取源文件夹信息 srcInfo, err := os.Stat(src) if err != nil { return err } // 创建目标文件夹 err = os.MkdirAll(dst, srcInfo.Mode()) if err != nil { return err } // 读取源文件夹 dir, err := os.ReadDir(src) if err != nil { return err } for _, file := range dir { srcFile := filepath.Join(src, file.Name()) dstFile := filepath.Join(dst, file.Name()) if file.IsDir() { // 递归复制子文件夹 err = f.CopyDir(srcFile, dstFile) if err != nil { return err } } else { // 复制文件 err = f.CopyFile(srcFile, dstFile) if err != nil { return err } } } return nil } func (f *FileUtils) CopyFile(src, dst string) error { srcFile, err := os.Open(src) if err != nil { return err } defer srcFile.Close() dstFile, err := os.Create(dst) if err != nil { return err } defer dstFile.Close() _, err = io.Copy(dstFile, srcFile) if err != nil { return err } return nil } func (*FileUtils) WinOpenFolder(folderPath string) error { cmd := exec.Command("explorer", folderPath) return cmd.Run() //fileInfo, err := os.Stat(folderPath) //if os.IsNotExist(err) { // return err //} //var ( // dir = "" // f = "" //) //if fileInfo.IsDir() { // dir = "" // f = folderPath //} else { // dir = filepath.Dir(folderPath) // f = filepath.Base(folderPath) //} //_, err = Exec.Command(fmt.Sprintf("explorer %s", f), dir) //return err } func (*FileUtils) WinOpenFile(dir string, fileName string) error { _, err := Exec.Command(fmt.Sprintf("cmd /c start %s", fileName), dir) return err }