forked from youpenglai/goutils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
dir.go
142 lines (125 loc) · 2.98 KB
/
dir.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
package pathtool
import (
"errors"
"os"
"path/filepath"
"strings"
)
// 文件夹是否存在
func DirExists(path string) (bool, error) {
info, err := os.Stat(path)
if err != nil {
return false, err
}
if !info.IsDir() {
return false, errors.New("Path is not Dir")
}
return true, nil
}
// 文件是否存在
func FileExists(path string) (bool, error) {
info, err := os.Stat(path)
if err != nil {
return false, err
}
if info.IsDir() {
return false, errors.New("Path is Dir")
}
return true, nil
}
func GetDirs(dirPath string) (dirList []string, err error) {
err = filepath.Walk(dirPath,
func(path string, f os.FileInfo, err error) error {
if f.IsDir() && f.Name() != dirPath {
dirList = append(dirList, path)
}
return nil
},
)
return
}
type FilterFunc func(filename string) bool
func dummy(str string) bool { return true }
// 获取文件夹下所有文件(递归、无文件夹)
func GetDirFiles(dirPath string, filter ...FilterFunc) (dirList []string, err error) {
filterFunc := dummy
if len(filter) >= 0 && filter[0] != nil {
filterFunc = filter[0]
}
err = filepath.Walk(dirPath,
func(path string, f os.FileInfo, err error) error {
if !f.IsDir() && filterFunc(path) {
dirList = append(dirList, path)
}
return nil
},
)
return
}
// 获取文件夹下符合后缀名的所有文件(递归、无文件夹)
func GetDirFilesForSuffixs(dirPath string, suffixs []string) (dirList []string, err error) {
err = filepath.Walk(dirPath,
func(path string, f os.FileInfo, err error) error {
var flag = false
for _, suffix := range suffixs {
flag = flag || strings.HasSuffix(path, suffix)
}
if !f.IsDir() && (flag) {
dirList = append(dirList, path)
}
return nil
},
)
return
}
/*
// 获取文件夹下所有文件(递归、无文件夹)
func GetDirFiles(dirPath string) (dirList []string, err error) {
files, err := ioutil.ReadDir(dirPath)
if err != nil {
return
}
for _, file := range files {
if file.IsDir() {
fmt.Println(filepath.Join(dirPath, file.Name()))
dirSubList, e := WalkGetDirFiles(filepath.Join(dirPath, file.Name()))
if e != nil {
err = e
return
}
dirList = append(dirList, dirSubList...)
} else {
dirList = append(dirList, filepath.Join(dirPath, file.Name()))
}
}
return
}
*/
/*
// 获取文件夹下符合后缀名的所有文件(递归、无文件夹)
func WalkGetDirFilesForSuffixs(dirPath string, suffixs []string) (dirList []string, err error) {
files, err := ioutil.ReadDir(dirPath)
if err != nil {
return
}
for _, file := range files {
if file.IsDir() {
dirSubList, e := WalkGetDirFilesForSuffixs(filepath.Join(dirPath, file.Name()), suffixs)
if e != nil {
err = e
return
}
dirList = append(dirList, dirSubList...)
} else {
var flag = false
for _, suffix := range suffixs {
flag = flag || strings.HasSuffix(dirPath, suffix)
}
if flag {
dirList = append(dirList, filepath.Join(dirPath, file.Name()))
}
}
}
return
}
*/