一尘不染

如何执行文件系统扫描

go

  1. 我需要编写一个函数,当给定文件夹的路径时,它会扫描以该文件夹为根的文件。
  2. 然后我需要显示该文件夹中的目录结构。

我知道怎么做 2(我将使用 jstree 在浏览器中显示它)。


阅读 178

收藏
2021-11-27

共1个答案

一尘不染

编辑 1.16:仍然有足够多的人回答这个问题,我想我会为 Go 1.16 更新它。

Go 1.16 中引入的函数filepath.WalkDir比之前编辑中提到的 filepath.Walk 具有更好的性能。这是一个工作示例:

package main

import (
    "flag"
    "fmt"
    "io/fs"
    "path/filepath"
)

func visit(path string, di fs.DirEntry, err error) error {
    fmt.Printf("Visited: %s\n", path)
    return nil
}

func main() {
    flag.Parse()
    root := flag.Arg(0)
    err := filepath.WalkDir(root, visit)
    fmt.Printf("filepath.WalkDir() returned %v\n", err)
}

编辑:仍然有足够多的人回答这个问题,我想我会为 Go1 API 更新它。这是filepath.Walk() 的一个工作示例。原文如下。

package main

import (
  "path/filepath"
  "os"
  "flag"
  "fmt"
)

func visit(path string, f os.FileInfo, err error) error {
  fmt.Printf("Visited: %s\n", path)
  return nil
} 


func main() {
  flag.Parse()
  root := flag.Arg(0)
  err := filepath.Walk(root, visit)
  fmt.Printf("filepath.Walk() returned %v\n", err)
}

请注意 filepath.Walk 递归遍历目录树。

这是一个示例运行:

$ mkdir -p dir1/dir2
$ touch dir1/file1 dir1/dir2/file2
$ go run walk.go dir1
Visited: dir1
Visited: dir1/dir2
Visited: dir1/dir2/file2
Visited: dir1/file1
filepath.Walk() returned <nil>
2021-11-27