forked from nanjishidu/gomini
-
Notifications
You must be signed in to change notification settings - Fork 0
/
file.go
140 lines (117 loc) · 2.51 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
package gomini
import (
"io/ioutil"
"os"
"sort"
)
// get file modified time
func FileMTime(file string) (int64, error) {
f, e := os.Stat(file)
if e != nil {
return 0, e
}
return f.ModTime().Unix(), nil
}
// get file size as how many bytes
func FileSize(file string) (int64, error) {
f, e := os.Stat(file)
if e != nil {
return 0, e
}
return f.Size(), nil
}
// delete file
func Remove(file string) error {
return os.Remove(file)
}
// RemoveAll删除path指定的文件,或目录及它包含的任何下级对象。它会尝试删除所有东西,除非遇到错误并返回。
// 如果path指定的对象不存在,RemoveAll会返回nil而不返回错误。
func RemoveAll(path string) error {
return os.RemoveAll(path)
}
// rename file name
func Rename(file string, to string) error {
return os.Rename(file, to)
}
// put string to file
func FilePutContent(file string, content string) (int, error) {
fs, e := os.Create(file)
if e != nil {
return 0, e
}
defer fs.Close()
return fs.WriteString(content)
}
// get string from text file
func FileGetContent(file string) (string, error) {
if !IsFile(file) {
return "", os.ErrNotExist
}
b, e := ioutil.ReadFile(file)
if e != nil {
return "", e
}
return string(b), nil
}
// it returns false when it's a directory or does not exist.
func IsFile(file string) bool {
f, e := os.Stat(file)
if e != nil {
return false
}
return !f.IsDir()
}
// IsExist returns whether a file or directory exists.
func IsExist(path string) bool {
_, err := os.Stat(path)
return err == nil || os.IsExist(err)
}
// create dir
func Mkdir(src string) error {
if IsExist(src) {
return nil
}
if err := os.MkdirAll(src, 0777); err != nil {
if os.IsPermission(err) {
}
return err
}
return nil
}
type FileRepos []Repository
type Repository struct {
Name string
FileTime int64
}
func (r FileRepos) Len() int {
return len(r)
}
func (r FileRepos) Less(i, j int) bool {
return r[i].FileTime < r[j].FileTime
}
func (r FileRepos) Swap(i, j int) {
r[i], r[j] = r[j], r[i]
}
// 如果文件达到最上限,按时间删除
func DelFile(files []os.FileInfo, count int, fileDir string) {
if len(files) <= count {
return
}
result := new(FileRepos)
for _, file := range files {
if file.IsDir() {
continue
} else {
*result = append(*result, Repository{Name: file.Name(), FileTime: file.ModTime().Unix()})
}
}
sort.Sort(result)
deleteNum := len(files) - count
for k, v := range *result {
if k+1 > deleteNum {
break
}
Remove(fileDir + v.Name)
}
return
}