代码拉取完成,页面将自动刷新
package file
import (
"io"
"io/fs"
"os"
"path"
"strings"
"gitee.com/duqingbing/go-utils/basic"
)
/*
* 获取目录下的文件列表
* dir: 扫描目录
* ignores : 忽略文件或文件夹
* recursion : 是否递归查找
*/
func FileList(dir string, ignores basic.KSlice, recursion bool) (res []string, err error) {
dir = strings.TrimRight(dir, "/")
fs, err := os.ReadDir(dir)
if err != nil {
return
}
m := ignores.ToMap()
for _, f := range fs {
fullName := path.Join(dir, f.Name())
if _, ok := m[fullName]; ok { // 出现在过滤中
continue
}
if f.IsDir() {
if recursion {
var subRes []string
subRes, err = FileList(fullName, ignores, true)
if err != nil {
return
}
res = append(res, subRes...)
}
continue
}
res = append(res, fullName)
}
return
}
/*
* 复制文件
* src: 复制源文件
* dist: 目标文件
* ignores : 忽略文件或文件夹
*/
func CopyFile(src, dist string) (copySize int, err error) {
// 打开源文件
sFile, err := os.Open(src)
if err != nil {
return
}
defer sFile.Close()
// 打开写入文件
dFile, err := os.Create(dist)
if err != nil {
return
}
defer dFile.Close()
// 创建缓冲区,边读边写
buf := make([]byte, 4096) // 由于虚拟内存的最小单位是 page(默认是4096),所以,设置成 4096
readSize := 0
for {
readSize, err = sFile.Read(buf)
if err != nil && err != io.EOF { // 读取错误
return
}
if readSize == 0 { // 读完毕
err = nil
return
}
copySize += readSize
// 写入文件
dFile.Write(buf[:readSize])
}
}
/*
* 复制目录
* src: 复制源目录
* dist: 目标目录
* ignores : 忽略文件或文件夹
*/
func CopyDir(src, dist string, ignores basic.KSlice) error {
ds, err := fs.ReadDir(os.DirFS(src), ".")
if err != nil {
return err
}
// 确保目标目录存在
if info, err := os.Stat(dist); err != nil || (info != nil && !info.IsDir()) {
if err = os.Mkdir(dist, os.ModePerm); err != nil {
return err
}
}
m := ignores.ToMap()
for _, file := range ds {
filename := file.Name()
if _, ok := m[filename]; ok { // 出现在过滤中
continue
}
srcFile := path.Join(src, file.Name())
distFile := path.Join(dist, file.Name())
if file.IsDir() {
if err = CopyDir(srcFile, distFile, ignores); err != nil {
return err
}
} else if _, err = CopyFile(path.Join(src, file.Name()), path.Join(dist, file.Name())); err != nil {
return err
}
}
return nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。