在go语言中实现目录内容读取功能示例代码

2023-06-01 00:00:00 语言 示例 读取

go语言中读取目录内容比较简单,下面介绍两种方式,使用filepath.Walk()、os.Open()函数实现。

方式1:filepath.Walk()

filepath.Walk函数允许程序轻松地遍历一个目录的内容和树。下面看看如何读取一个目录并显示其内容名称和文件大小。这个例子将使用函数

http://golang.org/pkg/path/filepath/#Walk 

readdirwalk.go

代码示例:

 package main
 
 import (
   "path/filepath"
   "os"
   "flag"
   "fmt"
 )
 func walkpath(path string, f os.FileInfo, err error) error {
   fmt.Printf("%s with %d bytes\n", path,f.Size())
   return nil
 }
 
 func main() {
   flag.Parse()
   root := flag.Arg(0) //第一个参数是目录位置
   filepath.Walk(root, walkpath)
 }

执行go运行readdirwalk.go ./,看看效果如何。

你可以换到不同的目录,也可以测试一下输出情况。



方式2:os.Open

os.File.Readdir函数可以遍历目录树和内容。看看如何读取一个目录并显示其文件和大小。

这个例子将使用os.Open

http://golang.org/pkg/os/#File.Readdir 


代码示例:

package main

 import (
     "fmt"
     "os"
     "path/filepath"
 )
 
 func main() {
     dirname := "." + string(filepath.Separator)
     d, err := os.Open(dirname)
     if err != nil {
         fmt.Println(err)
         os.Exit(1)
     }
     defer d.Close()
     files, err := d.Readdir(-1)
     if err != nil {
         fmt.Println(err)
         os.Exit(1)
     }
     fmt.Println("Reading "+ dirname)
     for _, file := range files {
         if file.Mode().IsRegular() {
             fmt.Println(file.Name(), file.Size(), "bytes")
         }
     }
 }

你也可以测试一下这段代码。

相关文章