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

在Go语言中处理文件和目录是常见需求,os 和 os/filepath 包提供了强大且简洁的接口来实现目录遍历、文件信息获取等操作。下面介绍如何使用这些功能完成实际任务。
遍历目录中的文件和子目录
使用 os.ReadDir 可以高效地读取指定目录下的所有条目。它返回一个
DirEntry
切片,比旧的
os.File.Readdir
更轻量且推荐用于现代Go代码。
支持按需获取文件信息,不强制加载所有元数据 可递归遍历子目录,适合构建树形结构扫描
示例:遍历目录并打印每个条目名称
package mainimport ( "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)
直接根据路径获取文件状态 常用字段包括:Name(), Size(), Mode(), ModTime(), IsDir()
示例:显示文件名、大小和是否为目录
func printFileInfo(path string) { entry, err := os.Stat(path) if err != nil { log.Fatal(err) } fmt.Printf("Name: %sn", entry.Name()) fmt.Printf("Size: %d bytesn", entry.Size()) fmt.Printf("IsDir: %tn", entry.IsDir()) fmt.Printf("ModTime: %vn", 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] %sn", 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
能覆盖大多数文件系统操作场景。这些API设计清晰,性能良好,适合构建配置扫描、日志清理、资源打包等工具。不复杂但容易忽略细节,比如错误处理和符号链接判断,实际使用时建议结合
os.Lstat
区分链接文件。
以上就是Golang的os文件操作 目录遍历与文件信息的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1399215.html
微信扫一扫
支付宝扫一扫