为了账号安全,请及时绑定邮箱和手机立即绑定

如何递归遍历文件和目录

如何递归遍历文件和目录

Go
FFIVE 2022-09-19 17:49:07
当尝试运行程序需要显示所有.md文件时,我有一个带有.md的测试子文件夹,但是脚本剂量找不到它?import (    "fmt"    "log"    "strings"    "os")func main() {    dir, err := os.ReadDir(".")    if err != nil {        log.Fatal(err)    }    for _, x := range dir {        if strings.HasSuffix(x.Name(), ".md") {            fmt.Println(x.Name())        }    }}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您可以使用步行道

package main


import (

   "io/fs"

   "path/filepath"

)



func main() {

   filepath.WalkDir(".", func(s string, d fs.DirEntry, e error) error {

    if e != nil { return e }

    if ! d.IsDir() {

       println(s)

    }

    return nil

 })

}


查看完整回答
反对 回复 2022-09-19
?
四季花海

TA贡献1811条经验 获得超5个赞

您需要使用文件路径。WalkDir 以递归方式检查目录,也可以使用 1.16 文件路径中引入的目录。步行。 将仅在提供的目录中工作。os.ReadDir

filepath.Walk(".", func(path string, info fs.FileInfo, err error) error {

    if err != nil {

        fmt.Printf("prevent panic by handling failure accessing a path %q: %v\n", path, err)

        return err

    }


    if strings.HasSuffix(info.Name(), ".md") {

        fmt.Printf("visited file or dir: %q\n", path)

    }


    return nil

})




查看完整回答
反对 回复 2022-09-19
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

为了添加已经足够的响应,这是我使用结构实现的container/ring

完整代码在这里

type (

    DirectoryGraph struct {

        RootPath string

        root     *ring.Ring

        Node     *ring.Ring

    }

)


func NewDirectoryGraph(root string) DirectoryGraph {

    r := ring.New(1)

    graph := DirectoryGraph{

        RootPath: root,

        root:     r,

        Node:     r,

    }

    filepath.WalkDir(graph.RootPath, graph.walk)

    return graph

}


func (g DirectoryGraph) walk(s string, d fs.DirEntry, e error) error {

    if e != nil {

        return e

    }

    next := ring.New(1)

    node := g.serialize(s, d, e)

    next.Value = node

    g.root.Link(next).Next()

    return nil

}


// Serializes a file-node

func (g DirectoryGraph) serialize(s string, d fs.DirEntry, e error) FileNode {

    n := FileNode{

        Path: s,

        Dir:  d,

        Sys:  SysInfo{},

    }


    ...


    return n

}


查看完整回答
反对 回复 2022-09-19
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号