Files
public/tools/file.go
2025-07-18 11:42:44 +08:00

189 lines
3.6 KiB
Go

package tools
import (
"bufio"
"io"
"io/ioutil"
"os"
"path"
"path/filepath"
"strings"
"github.com/xxjwxc/public/mylog"
)
// CheckFileIsExist 检查目录是否存在
func CheckFileIsExist(filename string) bool {
var exist = true
if _, err := os.Stat(filename); os.IsNotExist(err) {
exist = false
}
return exist
}
// BuildDir 创建目录
func BuildDir(absDir string) error {
return os.MkdirAll(path.Dir(absDir), os.ModePerm) //生成多级目录
}
// DeleteFile 删除文件或文件夹(软删除.不会真正删除.添加后缀.bak)
func DeleteFile(absDir string) error {
absDir = strings.TrimSuffix(absDir, "\\")
absDir = strings.TrimSuffix(absDir, "/")
return os.Rename(absDir, absDir+".bak")
// return os.RemoveAll(absDir)
}
// DeleteFile 删除文件或文件夹(硬删除)
func DeleteAbs(absDir string) error {
return os.RemoveAll(absDir)
}
// GetPathDirs 获取目录所有文件夹
func GetPathDirs(absDir string) (re []string) {
if CheckFileIsExist(absDir) {
files, _ := ioutil.ReadDir(absDir)
for _, f := range files {
if f.IsDir() {
re = append(re, f.Name())
}
}
}
return
}
// GetPathFiles 获取目录所有文件
func GetPathFiles(absDir string) (re []string) {
if CheckFileIsExist(absDir) {
files, _ := ioutil.ReadDir(absDir)
for _, f := range files {
if !f.IsDir() {
re = append(re, f.Name())
}
}
}
return
}
// GetModelPath 获取程序运行目录
func GetModelPath() string {
dir, _ := os.Getwd()
return strings.Replace(dir, "\\", "/", -1)
}
// GetCurrentDirectory 获取exe所在目录
func GetCurrentDirectory() string {
dir, _ := os.Executable()
exPath := filepath.Dir(dir)
// fmt.Println(exPath)
return strings.Replace(exPath, "\\", "/", -1)
}
// SaveToFile 写入文件
func SaveToFile(fname string, src []string, isClear bool) bool {
return WriteFile(fname, src, isClear)
}
// WriteFile 写入文件
func WriteFile(fname string, src []string, isClear bool) bool {
BuildDir(fname)
flag := os.O_CREATE | os.O_WRONLY | os.O_TRUNC
if !isClear {
flag = os.O_CREATE | os.O_RDWR | os.O_APPEND
}
f, err := os.OpenFile(fname, flag, 0666)
if err != nil {
mylog.Error(err)
return false
}
defer f.Close()
for _, v := range src {
f.WriteString(v)
f.WriteString("\r\n")
}
return true
}
// WriteFile 写入文件
func WriteFileEx(fname string, src []byte, isClear bool) bool {
flag := os.O_CREATE | os.O_WRONLY | os.O_TRUNC
if !isClear {
flag = os.O_CREATE | os.O_RDWR | os.O_APPEND
}
f, err := os.OpenFile(fname, flag, 0666)
if err != nil {
mylog.Error(err)
return false
}
defer f.Close()
f.Write(src)
return true
}
// ReadFileEx 读取文件
func ReadFileEx(fname string) []byte {
if !CheckFileIsExist(fname) {
return []byte{}
}
data, err := os.ReadFile(fname) // 使用 os.ReadFile (Go 1.16+)
if err != nil {
mylog.Error(err)
return []byte{}
}
return data
}
// ReadFile 读取文件
func ReadFile(fname string) (src []string) {
f, err := os.OpenFile(fname, os.O_RDONLY, 0666)
if err != nil {
return []string{}
}
defer f.Close()
rd := bufio.NewReader(f)
for {
line, _, err := rd.ReadLine()
if err != nil || io.EOF == err {
break
}
src = append(src, string(line))
}
return src
}
// MoveFile 移动文件或文件夹(/结尾)
func MoveFile(from, to string) error {
// if !CheckFileIsExist(to) {
// BuildDir(to)
// }
return os.Rename(from, to)
}
func CopyFile(src, des string) error {
if !CheckFileIsExist(des) {
BuildDir(des)
}
srcFile, err := os.Open(src)
if err != nil {
return err
}
defer srcFile.Close()
desFile, err := os.Create(des)
if err != nil {
return err
}
defer desFile.Close()
_, err = io.Copy(desFile, srcFile)
return err
}