102 lines
1.7 KiB
Go
102 lines
1.7 KiB
Go
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
|
|
}
|