103 lines
2.1 KiB
Go
103 lines
2.1 KiB
Go
package interceptor
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
type FileModule struct{}
|
|
|
|
func (f *FileModule) ReadFile(path string, encode string) interface{} {
|
|
fileContent, err := os.ReadFile(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if encode == "binary" {
|
|
return fileContent
|
|
}
|
|
return string(fileContent)
|
|
}
|
|
|
|
func (f *FileModule) WriteFile(path string, content interface{}, encode string) {
|
|
fileContent, err := os.ReadFile(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
if encode == "binary" {
|
|
os.WriteFile(path, fileContent, 0644)
|
|
}
|
|
os.WriteFile(path, []byte(content.(string)), 0644)
|
|
}
|
|
|
|
func (f *FileModule) RemoveFile(path string) {
|
|
os.Remove(path)
|
|
}
|
|
|
|
func (f *FileModule) Exists(path string) bool {
|
|
_, err := os.Stat(path)
|
|
if err != nil {
|
|
return os.IsExist(err)
|
|
}
|
|
return true
|
|
}
|
|
|
|
func (f *FileModule) IsDir(path string) bool {
|
|
fileInfo, err := os.Stat(path)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return fileInfo.IsDir()
|
|
}
|
|
|
|
func (f *FileModule) MakeDir(path string, rescursive bool) {
|
|
os.MkdirAll(path, 0755)
|
|
}
|
|
|
|
func (f *FileModule) RemoveDir(path string) {
|
|
os.RemoveAll(path)
|
|
}
|
|
|
|
func (f *FileModule) ListDir(path string) []string {
|
|
files, err := os.ReadDir(path)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
fileNames := make([]string, 0, len(files))
|
|
for _, file := range files {
|
|
fileNames = append(fileNames, file.Name())
|
|
}
|
|
return fileNames
|
|
}
|
|
|
|
func (f *FileModule) Copy(src, dst string) {
|
|
if !f.IsDir(dst) {
|
|
if f.IsDir(filepath.Dir(dst)) {
|
|
bcontent := f.ReadFile(src, "binary")
|
|
f.WriteFile(dst, bcontent, "binary")
|
|
return
|
|
} else {
|
|
panic(fmt.Errorf("destination directory not exists"))
|
|
}
|
|
|
|
}
|
|
if f.IsDir(src) {
|
|
if strings.HasSuffix(dst, "/") {
|
|
dst = dst + filepath.Base(src)
|
|
f.MakeDir(dst, true)
|
|
}
|
|
os.CopyFS(dst, os.DirFS(src))
|
|
}
|
|
// 文件拷贝, 需要先读取文件内容, 然后写入到目标文件中
|
|
bcontent := f.ReadFile(src, "binary")
|
|
f.WriteFile(dst, bcontent, "binary")
|
|
// 拷贝文件属性
|
|
fileInfo, err := os.Stat(src)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
os.Chmod(dst, fileInfo.Mode())
|
|
os.Chtimes(dst, fileInfo.ModTime(), fileInfo.ModTime())
|
|
}
|