Golang 遍历文件夹:高效获取二级子文件夹及文件路径
Golang 遍历文件夹:高效获取二级子文件夹及文件路径
使用 Go 语言的 filepath.Walk 函数可以方便地遍历指定文件夹,并获取其下的所有文件和文件夹。本文将介绍如何使用 filepath.Walk 函数,并提取二级子文件夹路径以及所有文件的路径。
示例代码:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
root := 'upload.dir'
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
// 如果是二级子文件夹,打印路径并跳过该文件夹下的遍历
if filepath.Dir(path) != root && filepath.Dir(filepath.Dir(path)) == root {
fmt.Println('二级子文件夹:', path)
return filepath.SkipDir
}
// 如果是根目录或一级子文件夹,继续遍历
return nil
}
// 如果是文件,打印路径
fmt.Println('文件:', path)
return nil
})
if err != nil {
fmt.Println(err)
}
}
代码解释:
- 使用
filepath.Walk函数遍历upload.dir文件夹。 filepath.Walk函数接受两个参数:root: 要遍历的根目录路径。walkFn: 一个回调函数,该函数会在遍历到每个文件或文件夹时被调用。
walkFn函数接受三个参数:path: 当前文件或文件夹的路径。info: 当前文件或文件夹的元数据信息。err: 遍历过程中出现的错误。
- 在
walkFn函数中,我们首先判断当前路径是否为二级子文件夹:filepath.Dir(path)获取当前路径的父目录路径。filepath.Dir(filepath.Dir(path))获取当前路径的祖父目录路径。- 如果父目录路径不等于根目录路径,且祖父目录路径等于根目录路径,则说明当前路径为二级子文件夹。
- 如果当前路径为二级子文件夹,则打印其路径并使用
filepath.SkipDir跳过该文件夹下的遍历。 - 如果当前路径是文件,则打印其路径。
通过以上步骤,我们可以使用 filepath.Walk 函数高效地遍历指定文件夹,并提取二级子文件夹路径以及所有文件的路径。该方法简单易懂,方便快捷,可用于多种场景,例如:
- 统计文件夹下文件的数量。
- 查找指定类型的文件。
- 批量处理文件。
希望本文对您有所帮助。如果您有任何问题,欢迎在评论区留言。
原文地址: https://www.cveoy.top/t/topic/oKJh 著作权归作者所有。请勿转载和采集!