-
Notifications
You must be signed in to change notification settings - Fork 0
/
file.go
182 lines (158 loc) · 3.43 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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package file
import (
"bufio"
"bytes"
"errors"
"io"
"os"
"sync"
)
/*
File name : file.go
Author : miaoyc
Create date : 2022/9/3 1:10 上午
Description : 文件和目录相关
*/
var (
lock sync.Mutex
)
// IsFileExists 判断文件是否存在, 如果文件存在返回true,否则返回false
func IsFileExists(filePath string) (bool, error) {
_, err := os.Stat(filePath)
if os.IsNotExist(err) {
return false, err
}
if IsFile(filePath) {
return true, nil
}
return false, errors.New("not file")
}
// IsDirExists 判断文件夹是否存在, 先判断是否存在,后判断是否是文件夹
func IsDirExists(folderPath string) (bool, error) {
_, err := os.Stat(folderPath)
if os.IsNotExist(err) {
return false, err
}
if IsDir(folderPath) {
return true, nil
}
return false, errors.New("not folder")
}
// IsDir 判断所给路径是否为文件夹
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
// IsFile 判断所给路径是否为文件
func IsFile(path string) bool {
return !IsDir(path)
}
// GetSize 获取文件大小
func GetSize(filePath string) int64 {
fileInfo, err := os.Stat(filePath)
if err != nil {
return 0
}
return fileInfo.Size()
}
// CopyFile 拷贝文件
func CopyFile(src, des string) (written int64, err error) {
srcFile, err := os.Open(src)
if err != nil {
return 0, err
}
defer srcFile.Close()
//获取源文件的权限
fi, _ := srcFile.Stat()
perm := fi.Mode()
desFile, err := os.OpenFile(des, os.O_RDWR|os.O_CREATE|os.O_TRUNC, perm) //复制源文件的所有权限
if err != nil {
return 0, err
}
defer desFile.Close()
return io.Copy(desFile, srcFile)
}
// CreateDir 创建目录
func CreateDir(path string) error {
exist, _ := IsDirExists(path)
if !exist {
err := os.Mkdir(path, os.ModePerm)
if err != nil {
return err
}
}
return nil
}
// BatchCreateDir 批量创建目录
func BatchCreateDir(pathList ...string) {
for _, path := range pathList {
CreateDir(path)
}
}
// SaveFile 保存文件
func SaveFile(filePath, content string) error {
lock.Lock()
defer lock.Unlock()
fileHandle, err := os.OpenFile(filePath, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
if err != nil {
return err
}
defer fileHandle.Close()
// NewWriter 默认缓冲区大小是 4096
// 需要使用自定义缓冲区的writer 使用 NewWriterSize()方法
buf := bufio.NewWriterSize(fileHandle, len(content))
buf.WriteString(content)
err = buf.Flush()
if err != nil {
return err
}
return nil
}
// DeleteFile 删除文件
func DeleteFile(filePath string) {
os.Remove(filePath)
}
// ClearDir 删除文件夹内的数据,不删除文件夹
func ClearDir(folderPath string) error {
exist, err := IsDirExists(folderPath)
if !exist || err != nil {
return err
}
err = os.RemoveAll(folderPath)
if err != nil {
return err
}
err = os.Mkdir(folderPath, os.ModePerm)
if err != nil {
return err
}
return nil
}
// DeleteDir 删除文件夹
func DeleteDir(folderPath string) error {
exist, err := IsDirExists(folderPath)
if !exist || err != nil {
return err
}
err = os.RemoveAll(folderPath)
if err != nil {
return err
}
return nil
}
// ReadFile 读取文件内容
func ReadFile(filePath string) (res []byte, err error) {
file, err := os.Open(filePath)
if err != nil {
return
}
defer file.Close()
buf := bytes.NewBuffer(nil)
if _, err = io.Copy(buf, file); err != nil {
return
}
return buf.Bytes(), nil
}