-
Notifications
You must be signed in to change notification settings - Fork 0
/
file.go
147 lines (128 loc) · 2.68 KB
/
file.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Package iohelper
// Date: 2022/9/7 00:43
// Author: Amu
// Description:
package iohelper
import (
"bufio"
"crypto/md5"
"encoding/hex"
"io"
"os"
"strings"
)
// FileExist 检查文件是否存在
func FileExist(absPath string) bool {
exist := true
if _, err := os.Stat(absPath); os.IsNotExist(err) {
exist = false
}
return exist
}
// DeleteFile 删除文件
func DeleteFile(absPath string) error {
return os.RemoveAll(absPath)
}
// GetPathFiles 获取指定目录下的所有文件
func GetPathFiles(absDir string) (re []string) {
if PathExist(absDir) {
files, _ := os.ReadDir(absDir)
for _, f := range files {
if !f.IsDir() {
re = append(re, f.Name())
}
}
}
return
}
// GetPwd 获取程序运行目录
func GetPwd() string {
dir, _ := os.Getwd()
return strings.Replace(dir, "\\", "/", -1)
}
// GetFileSize 获取文件大小
func GetFileSize(filename string) (int64, error) {
file, err := os.Stat(filename)
if err != nil {
return 0, err
}
return file.Size(), nil
}
// SaveToFile 写入文件 isClear false 追加写入 true 覆盖写入
func SaveToFile(fname string, src []string, isClear bool) bool {
return WriteFile(fname, src, isClear)
}
// WriteFile 写入文件
func WriteFile(fname string, src []string, isClear bool) bool {
MakeDir(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 {
return false
}
defer f.Close()
for _, v := range src {
f.WriteString(v)
f.WriteString("\r\n")
}
return true
}
// 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 !PathExist(des) {
MakeDir(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
}
// FileMD5 计算文件的 md5
func FileMD5(filename string) (string, error) {
f, err := os.Open(filename)
if err != nil {
return "", err
}
defer f.Close()
md5Handle := md5.New()
_, err = io.Copy(md5Handle, f)
if err != nil {
return "", err
}
md5String := hex.EncodeToString(md5Handle.Sum(nil))
return md5String, nil
}