使用os.ReadDir遍历目录,os.Stat获取文件信息,filepath.WalkDir实现递归遍历。示例展示列出条目、打印文件详情及全树扫描,结合DirEntry.Info()获取元数据,支持过滤与错误处理,适用于配置扫描、日志清理等场景。

在Go语言中处理文件和目录是常见需求,os 和 os/filepath 包提供了强大且简洁的接口来实现目录遍历、文件信息获取等操作。下面介绍如何使用这些功能完成实际任务。
使用 os.ReadDir 可以高效地读取指定目录下的所有条目。它返回一个
DirEntry
os.File.Readdir
示例:遍历目录并打印每个条目名称
package main
import (
"fmt"
"log"
"os"
)
func listDir(path string) {
entries, err := os.ReadDir(path)
if err != nil {
log.Fatal(err)
}
for _, entry := range entries {
fmt.Println(entry.Name())
}
}
func main() {
listDir(".")
}
通过 os.Stat 或
DirEntry.Info()
os.FileInfo
立即学习“go语言免费学习笔记(深入)”;
entry.Info()
os.Stat(path)
示例:显示文件名、大小和是否为目录
func printFileInfo(path string) {
entry, err := os.Stat(path)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s\n", entry.Name())
fmt.Printf("Size: %d bytes\n", entry.Size())
fmt.Printf("IsDir: %t\n", entry.IsDir())
fmt.Printf("ModTime: %v\n", entry.ModTime())
}
对于深层嵌套的目录结构,可以结合 filepath.WalkDir 实现自动递归遍历。它会访问每一个子目录和文件,并调用用户提供的函数处理每个路径。
示例:打印所有文件和目录路径及其类型
import (
"fmt"
"os"
"path/filepath"
)
func walkDir(root string) {
filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error {
if err != nil {
return err
}
info, _ := d.Info()
if d.IsDir() {
fmt.Printf("[DIR] %s\n", path)
} else {
fmt.Printf("[FILE] %s (%d bytes)\n", path, info.Size())
}
return nil
})
}
func main() {
walkDir("./example")
}
注意:在回调函数中可以自由过滤路径、跳过某些目录(返回
filepath.SkipDir
基本上就这些。掌握
os.ReadDir
os.Stat
filepath.WalkDir
os.Lstat
以上就是Golang的os文件操作 目录遍历与文件信息的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号