# 使用 filepath.walk

package main
import (
	"fmt"
	"io/fs"
	"os"
	"path/filepath"
	"strings"
)
func main() {
	for i:=0; i< 10; i++{
		os.Create(fmt.Sprintf("test_%d.txt",i))
	}
	var files = []string{}
	filepath.Walk(".", func(path string, info fs.FileInfo, err error) error {
       if info.IsDir(){ // 判断是否是文件夹
			return nil
		}
		if strings.HasSuffix(path, ".txt"){
			files = append(files, info.Name())
		}
		if filepath.Ext(path) == ".txt"{ // 也可以用这个指令判断后缀
			files = append(files, info.Name())
			os.Remove(path)
		}
		return nil
	})
	fmt.Printf("files: %v\n", files)
}

filepath.Walk 需要提供一个遍历函数,按照他给的写就行了。

结果:

image-20220114203348972

# 使用 ioutil.ReadDir

package main
import (
	"fmt"
	"io/ioutil"
	"log"
	"strings"
)
func main() {
	files := []string{}
	fi, err := ioutil.ReadDir("..")
	if err != nil {
		log.Fatal(err)
		fmt.Println("Not Exit")
	}
	for _, file := range fi {
		if strings.HasSuffix(file.Name(), ".go") { // 筛选后缀
			files = append(files, file.Name())
		}
	}
	fmt.Printf("files: %v\n", files)
}

# 使用 os.File.Readdir

这个的使用方法也很简单:

package main
import (
	"fmt"
	"os"
)
func main() {
	f, _:= os.Open("..")
	files, _ := f.ReadDir(-1)
	for _, file := range files {
		fmt.Printf("file.Name(): %v\n", file.Name())
	}
	de, _ := os.ReadDir("..") // 可以直接 readDir,更加方便
	for _, file := range de {
		fmt.Printf("file: %v\n", file.Name())
	}
}