使用参考:
d := dir.NewDir("/")dirs, err := d.LoopLevelDir(0)// 实现遍历目录的功能
// 也可以指定层级遍历,遍历几层目录
package dir
import (
"fmt""io/ioutil""strings""time")
type Dir struct {
rootDir string // 需要遍历的根目录curDirs []string // 当前级别的目录dirs []string // 全部的目录nDirLevel int // 当前目录级别bInit bool // 是否初始化}
// 创建一个目录
func NewDir(rootDir string) *Dir {
var dir Dirdir.rootDir = rootDirdir.bInit = truedir.nDirLevel = 0dir.curDirs = []string{rootDir}return &dir}
// 只遍历单层目录
func (d *Dir) loopOneDir(dirPath string) ([]string, error) {
var ds []string// 如果是读取目录失败的,就是没有权限,直接返回空就好了dir, err := ioutil.ReadDir(dirPath)if err != nil { return nil, nil //return nil, fmt.Errorf("ioutil.ReadDir(%s)错误,%s", dirPath, err.Error())}for _, fi := range dir { if fi.IsDir() { onePath := strings.Replace(dirPath+"/"+fi.Name(), "//", "/", -1) ds = append(ds, onePath) }}return ds, nil}
// 遍历目录,如果nLevel为0表示一直遍历下去直到为空截止
func (d *Dir) LoopLevelDir(nLevel int) ([]string, error) {
if !d.bInit { return nil, fmt.Errorf("未初始化")}var err errorfor { d.nDirLevel++ var tmpAllDirs, tmpOneDirs []string for i := 0; i < len(d.curDirs); i++ { if tmpOneDirs, err = d.loopOneDir(d.curDirs[i]); err != nil { return nil, fmt.Errorf("遍历根目录[%s]失败,%s", d.rootDir, err.Error()) } tmpAllDirs = append(tmpAllDirs, tmpOneDirs...) } d.curDirs = tmpAllDirs if len(tmpAllDirs) == 0 { break } fmt.Printf("[%s] 第[%d]层目录遍历完成,共计[%d]文件夹
", FormatTime(), d.nDirLevel, len(tmpAllDirs)) d.dirs = append(d.dirs, tmpAllDirs...) if d.nDirLevel >= nLevel && nLevel != 0 { break }}return d.dirs, nil}
// 获得当前格式化的数据,形如2017-03-15 16:07:32.236
func FormatTime() string {
return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d.%03d", time.Now().Year(), time.Now().Month(), time.Now().Day(), time.Now().Hour(), time.Now().Minute(), time.Now().Second(), time.Now().Nanosecond()/1e6)}
继续阅读与本文标签相同的文章
-
数据挖掘与机器学习释义
2026-05-20栏目: 教程
-
公司为什么需要建立一套统一的开发框架?
2026-05-20栏目: 教程
-
IoT时代:Wi-Fi“配网”技术剖析总结
2026-05-20栏目: 教程
-
Intel Skylake Xeon Platinum 8163 2.5GHz 阿里云ECS服务器CPU性能
2026-05-20栏目: 教程
-
Intel Xeon(Cascade Lake) Platinum 8269 2.5GHz 阿里云ECS服务器CPU性能
2026-05-20栏目: 教程
