golang - 遍历目录内容

简介

在Go语言里面,提供了path/filepath这个包,可以方便我们遍历目录。

需求:现在需要找出目录的.html文件


标准库

type WalkFunc func(path string, info os.FileInfo, err error) error

Walk函数对每一个文件/目录都会调用WalkFunc函数类型值。调用时path参数会包含Walk的root参数作为前缀;就是说,如果Walk函数的root为"dir",该目录下有文件"a",将会使用"dir/a"调用walkFn参数。walkFn参数被调用时的info参数是path指定的地址(文件/目录)的文件信息,类型为os.FileInfo。

如果遍历path指定的文件或目录时出现了问题,传入的参数err会描述该问题,WalkFunc类型函数可以决定如何去处理该错误(Walk函数将不会深入该目录);如果该函数返回一个错误,Walk函数的执行会中止;只有一个例外,如果Walk的walkFn返回值是SkipDir,将会跳过该目录的内容而Walk函数照常执行处理下一个文件。

func Walk(root string, walkFn WalkFunc) error

Walk函数会遍历root指定的目录下的文件树,对每一个该文件树中的目录和文件都会调用walkFn,包括root自身。所有访问文件/目录时遇到的错误都会传递给walkFn过滤。文件是按词法顺序遍历的,这让输出更漂亮,但也导致处理非常大的目录时效率会降低。Walk函数不会遍历文件树中的符号链接(快捷方式)文件包含的路径。


代码

package main

import (

"flag"

"fmt"

"os"

"path/filepath"

"strings"

)

func getFilelist(path string, stuffix string) (files []string) {

err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {

if f == nil {

return err

}

if f.IsDir() {

return nil

}

if strings.HasSuffix(path, stuffix) {

files = append(files, path)

}

return nil

})

if err != nil {

fmt.Printf("filepath.Walk() returned %v\n", err)

}

return

}

func main() {

flag.Parse()

root := flag.Arg(0)

// 设置默认遍历当前目录

if root == "" {

root = "./"

}

fmt.Println(getFilelist(root, ".html"))

}

golang - 遍历目录内容

相关推荐