Golang程序 获取指定目录下的文件名列表

Golang程序 获取指定目录下的文件名列表

在Golang中,我们有两个内部函数–ReadDir()和Walk函数,用来获取一个特定目录中的文件名列表。这里我们写了三个例子。在第一个例子中,我们将使用ioutil包中的ReadDir()函数,而在第二个例子中,我们将使用filepath包中的walk函数。

方法1:使用ioutil包

Golang的ioutil包提供了几个函数来执行输入/输出操作,包括读取文件和目录。ioutil包的ReadDir()函数被用来获取指定目录下的文件列表。

语法

func ReadDir(dirname string) ([]os.FileInfo, error)
Go

ReadDir()函数将目录名作为参数,并返回一个os.FileInfo的片断,如果有的话,还返回一个错误。os.FileInfo接口提供了关于一个文件或目录的信息,包括它的名称、大小和时间戳。

算法

  • 在你的Go程序中导入ioutil包。

  • 调用ioutil.ReadDir()函数,将目录的路径作为一个参数传给它。

  • ReadDir()函数返回一个os.FileInfo对象的片断,每个对象代表指定目录中的一个文件或目录。

  • 循环浏览os.FileInfo对象的片断,并打印文件的名称。

例子

在这个例子中,我们将使用 Golang 的 ioutil 包来获取指定目录下的文件名列表

package main
import (
   "fmt"
   "io/ioutil"
)

func main() {
   files, err := ioutil.ReadDir(".")
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
   for _, file := range files {
      fmt.Println(file.Name())
   }
}
Go

输出

.cache
main.go
Go

方法2:使用操作系统包

Golang中的os包提供了几个函数来执行操作系统操作,包括读取文件和目录。os包的Readdir()函数被用来获取指定目录下的文件列表。

语法

func Readdir(dirname string) ([]os.FileInfo, error)
Go

Readdir()函数将目录名作为参数,并返回os.FileInfo的一个片断,如果有错误,则返回一个错误。

算法

  • 在你的 Go 程序中导入 fmt 和 os 包。

  • 调用os.Open()函数,将目录的路径作为一个参数传给它。

  • Open()函数返回一个指向os.File对象的指针,它代表打开的目录。

  • 在os.File对象上调用Readdir()函数,它返回一个os.FileInfo对象的片断,每个对象代表指定目录中的一个文件或目录。

  • 循环浏览os.FileInfo对象的片断,并打印文件的名称。

例子

在这个例子中,我们使用os.Open()函数来打开当前目录(用”. “表示),并使用os.File.Readdir()方法来获得文件列表。然后,返回的os.FileInfo片断被循环使用,每个os.FileInfo的Name()方法被用来打印文件名。

package main
import (
   "fmt"
   "os"
)

func main() {
   dir, err := os.Open(".")
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
   defer dir.Close()
   files, err := dir.Readdir(-1)
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
   for _, file := range files {
      fmt.Println(file.Name())
   }
}
Go

输出

.cache
main.go
Go

方法3:使用Filepath包

Golang中的filepath包提供了几个函数来执行与文件路径相关的操作,包括读取文件和目录。filepath包的Walk()函数用于获取指定目录下的文件列表。

语法

func Walk(root string, walkFn WalkFunc) error
Go

Walk()函数接受根目录名称和一个回调函数(WalkFunc)作为参数。WalkFunc函数对根目录树中的每个文件或目录都被调用,包括根目录本身。WalkFunc的错误返回值会在调用链中向上传播。

算法

  • 在你的Go程序中导入filepath和fmt包。

  • 定义一个filepath.WalkFunc类型的回调函数,对根目录下的每个文件或目录进行调用,包括根本身。

  • 调用filepath.Walk()函数,将根目录的名称和回调函数作为参数传递。

  • Walk()函数遍历以根为根的树,为树上的每个文件或目录调用回调函数。

  • 在回调函数中,如果文件不是目录,则打印文件的名称。

  • WalkFunc的错误返回值会在调用链中向后传播。检查在Walk()函数中可能发生的任何错误。

例子

在这个例子中,我们使用filepath.Walk()函数来遍历当前目录(用”. “表示)。回调函数对树中的每个文件和目录都进行了调用,并且只打印了文件的名称。

package main
import (
   "fmt"
   "path/filepath"
   "os"
)

func main() {
   err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
      if !info.IsDir() {
         fmt.Println(info.Name())
      }
      return nil
   })
   if err != nil {
      fmt.Println("Error:", err)
      return
   }
}
Go

输出

0e2b514f755ee4f625d64cbbd7c2105ede7801c584c4b7c84ab92a6bba8bead3-a
488f59492c5d2acb89df6f7dd4adeb489e794f4c7f4b7099b1ce8bfd4bb76555-d
491a6fde5177b15e27e5483d63c5275ef3fb4d1160e2f0250593f0500e3ffa42-d
README
c1e4b74d07dece466552274a8aaf6ea8cbe8b38326ab63779edc68c311125873-a
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855-d
ef52495a5cadbbe9f3a90c71303222f26f455e79cdb1e4a5bd23c6d0fd037dfa-a
f93942f3d6be608e81b2d3c28c3ed57f5c78c1367b8844742d977252fc2921e2-a
main.go
Go

结语

在结论中,Golang提供了几种方法来获取指定目录下的文件名列表,包括使用ioutil包、os包和filepath包。每种方法都有自己的语法、用例和算法,对方法的选择取决于具体任务的要求。无论你是需要执行一个简单的目录列表还是遍历整个目录树,Golang都有必要的工具来高效地完成任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册