mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-26 20:01:19 +08:00
189 lines
3.6 KiB
Go
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
|
|
}
|