Golang遍历目录:排除特定目录和文件
Golang遍历目录:排除特定目录和文件
在Golang中,我们经常需要遍历目录并获取文件信息。本文将介绍如何使用filepath.Walk函数遍历目录,并通过自定义规则排除特定目录和文件,例如排除名称以'@'符号开头的目录和所有文件。
代码示例
package main
import (
'fmt'
'os'
'path/filepath'
)
func main() {
root := '.' // 遍历当前目录
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if path == root {
return nil // 跳过根目录
}
if info.IsDir() && filepath.Base(path)[0] == '@' {
return filepath.SkipDir // 跳过第一级目录名中带有@符号的目录
}
if !info.IsDir() {
return nil // 跳过所有文件
}
fmt.Println('Directory:', path)
// 遍历子目录
err = filepath.Walk(path, func(subPath string, subInfo os.FileInfo, subErr error) error {
if subErr != nil {
return subErr
}
if subInfo.IsDir() {
fmt.Println('Subdirectory:', subPath)
return nil // 继续遍历子目录
}
fmt.Println('File:', subPath)
return nil
})
if err != nil {
return err
}
return nil
})
if err != nil {
fmt.Println(err)
}
}
代码解读
filepath.Walk函数: 该函数递归遍历目录树,并为每个遇到的文件或目录调用回调函数。- 回调函数: 代码中定义了一个匿名回调函数,它接收三个参数:
path:当前文件或目录的路径。info:os.FileInfo类型的结构体,包含文件或目录的信息。err:遍历过程中遇到的错误。
- 排除逻辑:
- 首先,判断当前路径是否为根目录,如果是则跳过。
- 接着,判断当前路径是否为以'@'符号开头的目录,如果是则使用
filepath.SkipDir跳过该目录及其子目录。 - 最后,判断当前路径是否为文件,如果是则跳过。
- 遍历子目录:
- 如果当前路径是目录且不符合排除条件,则再次调用
filepath.Walk函数遍历子目录。
- 如果当前路径是目录且不符合排除条件,则再次调用
总结
通过自定义回调函数和filepath.Walk函数,我们可以灵活地控制目录遍历行为,并根据需求排除特定目录或文件。
原文地址: https://www.cveoy.top/t/topic/jod8 著作权归作者所有。请勿转载和采集!