/
file.go
79 lines (64 loc) · 1.62 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
package utils
import (
"crypto/md5"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
var (
// ErrFileExisted error message when file exist
ErrFileExisted = "target file %s is existed"
// ErrMd5Check error message when check md5
ErrMd5Check = "md5 is not same: Origin MD5(%s)\tCurrent MD5(%s)"
)
// Md5File generate md5 string
func Md5File(filepath string) (string, error) {
content, err := ioutil.ReadFile(filepath)
if err != nil {
return "", err
}
return fmt.Sprintf("%x", md5.Sum(content)), nil
}
// ChkMd5Info check md5 info is same or not
func ChkMd5Info(filepath string, md5Str string) error {
if newMd5Str, err := Md5File(filepath); err != nil {
return err
} else if newMd5Str != md5Str {
return fmt.Errorf(ErrMd5Check, newMd5Str, md5Str)
}
return nil
}
// FileExist 判断文件是否存在
func FileExist(filepath string) bool {
fi, err := os.Stat(filepath)
return (err == nil || os.IsExist(err)) && !fi.IsDir()
}
// DirExist 判断文件夹是否存在
func DirExist(dirpath string) bool {
fi, err := os.Stat(dirpath)
return (err == nil || os.IsExist(err)) && fi.IsDir()
}
// IsDir is directory or not
func IsDir(filepath string) bool {
fi, err := os.Stat(filepath)
return err == nil && fi.IsDir()
}
// LocalPathSize directory size with all file in it
func LocalPathSize(dirPath string) (int64, error) {
if !IsDir(dirPath) {
info, err := os.Stat(dirPath)
if err != nil {
return 0, err
}
return info.Size(), nil
}
var size int64
err := filepath.Walk(dirPath, func(_ string, info os.FileInfo, err error) error {
if !info.IsDir() {
size += info.Size()
}
return err
})
return size, err
}