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)
	}
}

代码解释:

  1. 使用 filepath.Walk 函数遍历 upload.dir 文件夹。
  2. filepath.Walk 函数接受两个参数:
    • root: 要遍历的根目录路径。
    • walkFn: 一个回调函数,该函数会在遍历到每个文件或文件夹时被调用。
  3. walkFn 函数接受三个参数:
    • path: 当前文件或文件夹的路径。
    • info: 当前文件或文件夹的元数据信息。
    • err: 遍历过程中出现的错误。
  4. walkFn 函数中,我们首先判断当前路径是否为二级子文件夹:
    • filepath.Dir(path) 获取当前路径的父目录路径。
    • filepath.Dir(filepath.Dir(path)) 获取当前路径的祖父目录路径。
    • 如果父目录路径不等于根目录路径,且祖父目录路径等于根目录路径,则说明当前路径为二级子文件夹。
  5. 如果当前路径为二级子文件夹,则打印其路径并使用 filepath.SkipDir 跳过该文件夹下的遍历。
  6. 如果当前路径是文件,则打印其路径。

通过以上步骤,我们可以使用 filepath.Walk 函数高效地遍历指定文件夹,并提取二级子文件夹路径以及所有文件的路径。该方法简单易懂,方便快捷,可用于多种场景,例如:

  • 统计文件夹下文件的数量。
  • 查找指定类型的文件。
  • 批量处理文件。

希望本文对您有所帮助。如果您有任何问题,欢迎在评论区留言。

Golang 遍历文件夹:高效获取二级子文件夹及文件路径

原文地址: https://www.cveoy.top/t/topic/oKJh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录