Go语言程序获取指定目录下的所有文件名列表


在 Go 语言中,我们有两个内置函数 - ReadDir() 和 Walk 函数,用于获取特定目录中存在的文件名列表。这里我们编写了三个示例。在第一个示例中,我们将使用 ioutil 包中的 ReadDir() 函数,而在第二个示例中,我们将使用 filepath 包中的 Walk 函数。

方法 1:使用 ioutil 包

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

语法

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

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

算法

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

  • 调用 ioutil.ReadDir() 函数,并将目录路径作为参数传递。

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

  • 循环遍历 os.FileInfo 对象的切片,并打印文件名称。

示例

在本示例中,我们将使用 Go 语言的 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())
   }
}

输出

.cache
main.go

方法 2:使用 os 包

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

语法

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

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())
   }
}

输出

.cache
main.go

方法 3:使用 Filepath 包

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

语法

func Walk(root string, walkFn WalkFunc) error

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

算法

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

  • 定义一个 filepath.WalkFunc 类型的回调函数,该函数在以 root 为根的树中的每个文件或目录(包括 root 本身)上都被调用。

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

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

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

  • 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
   }
}

输出

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

结论

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

更新于: 2023年2月22日

4K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.