go 遍历文件中的所有文件打印

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

type fileFilter func(fpath string) bool

type callBack func(path string)

func ReadFile(path string) {
	file, err := os.Open(path)
	if err != nil {
		return
	}

	content := make([]byte, 1024)
	contentAll := make([]byte, 1024)

	for {
		n, err := file.Read(content)
		if err == io.EOF {
			break
		}
		contentAll = append(contentAll, content[:n]...)

		fmt.Println(contentAll[:n])
	}
	fmt.Println(string(contentAll))

}
func Dir(path string, filter fileFilter, back callBack) {
	file, err := os.Open(path)
	//fmt.Println(file)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()

	dirName, err := file.Readdirnames(-1) //-1表示读取全部没有限制

	for _, name := range dirName {
		//fmt.Println(dirName)
		fPath := path + "/" + name
		if fileInfo, err := os.Stat(fPath); err == nil {
			if fileInfo.IsDir() {
				//fmt.Println(fPath)
				Dir(fPath, filter, back)
			}

			if filter == nil || filter(fPath) {
				//fmt.Printf("file:%#v", fPath)
				if back != nil {
					back(fPath)
				}
			}

		}
	}

}

func main() {
	Dir("folder", func(path string) bool {
		return strings.HasSuffix(path, ".go")
	}, func(path string) {
		ReadFile(path)
	})
}


posted @   wangsk  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示