自学内容网 自学内容网

Go实现递归遍历文件夹

文件夹的递归遍历是操作系统编程中的常见需求,特别是在处理大量文件时,比如查找特定文件、统计文件数量、展示文件结构等。

需求分析

我们需要完成以下步骤:

  1. 读取当前文件夹下的所有文件和子文件夹。
  2. 如果遇到子文件夹,进入该文件夹并继续遍历其中的文件。
  3. 使用缩进或符号来表示文件夹的层级结构。
  4. 使用fmtlog库输出文件信息和调试日志。
package main

import (
"fmt"
"log"
"os"
)

// cd /d 文件夹路径
// tree /F , 查看当前文件夹下的所有文件

// 遍历文件夹
// 1、读取当前文件夹下的所有文件
// 2、如果是文件夹,进入文件夹,继续读取里面的所有文件
// 3、设置一些结构化代码
func main() {
dir := "D:\\OneDrive\\Godev\\src\\learngo\\lesson11time包"
mytree(dir, 0)
}

// 日常调试测试常用fmt输出 、 工作中or项目中更多是log日志输出
// log.Print():类似于fmt.Print(),但会添加日志前缀(默认是时间戳)。
// log.Println():类似于fmt.Println(),但会添加日志前缀。
// log.Printf():类似于fmt.Printf(),但会添加日志前缀。
// log.Fatal():输出日志信息后调用os.Exit(1)退出程序。
// log.Panic():输出日志信息后调用panic()引发恐慌。

// log.SetPrefix():设置日志前缀。
// log.SetFlags():设置日志输出的格式标志,比如是否显示时间、文件名等。
func mytree(dir string, level int) {
//编写层级
tabstring := "|--"
for i := 0; i < level; i++ {
tabstring = "|  " + tabstring
}
//func ReadDir(name string) ([]DirEntry, error)
// 获取目录 ReadDir, 返回目录信息[]DirEntry,多个文件信息
fileinfos, err := os.ReadDir(dir)
if err != nil {
log.Println(err) //错误一般用log
}
// 遍历出来所有文件之后,获取里面的单个文件

for _, file := range fileinfos {
//文件夹中文件的全路径,file.Name()是相对路径
filename := dir + "\\" + file.Name()
fmt.Println(tabstring + file.Name()) //一般信息用fmt
//如果是文件夹再次遍历
if file.IsDir() {
mytree(filename, level+1)
}
}
}


原文地址:https://blog.csdn.net/qq_36372352/article/details/142867744

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!