golang 获取文件树信息

本文介绍了一种使用Golang语言获取目录下所有文件及子目录的方法,通过递归遍历实现了文件树信息的获取,并详细展示了如何创建FileInfo结构体来存储文件路径、名称、大小等信息。此外,还介绍了如何利用sort包对文件进行排序。

golang 获取文件树信息


type FileInfo struct{
	IsDir bool
	Path string
	Name string
	Time string
	Size int64
	Level int
}
type FileInfoSlice []FileInfo
func (s FileInfoSlice) Len() int { return len(s) }
func (s FileInfoSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s FileInfoSlice) Less(i, j int) bool { return s[i].Name < s[j].Name }

func GetDirFileList(folder string, level int) []FileInfo {
	var lists []FileInfo
	files, errDir := ioutil.ReadDir(folder)
	if errDir != nil {
		log.Fatal(errDir)
	}
	var listd FileInfoSlice
	for _, file := range files {
		if file.IsDir() {
			oneFile:= FileInfo{file.IsDir(), folder, file.Name(), "", file.Size(), level}
			listd = append(listd, oneFile)
		}
	}
	sort.Stable(listd)
	for i, file := range listd {
		LogD(i,file)
	}
	for _, file := range listd {
		lists = append(lists, file)
		list1:=GetDirFileList(folder+FileSeparatorChar+file.Name, level+1)
		lists = append(lists, list1...)
	}
	var listf FileInfoSlice
	for _, file := range files {
		if !file.IsDir() {
			oneFile:= FileInfo{file.IsDir(), folder, file.Name(), "", file.Size(), level}
			listf = append(listf, oneFile)
		}
	}
	sort.Stable(listf)
	for i, file := range listf {//for i := 0; i < len(listf)-1; i++ {
		LogD(i,file)
		lists = append(lists, file)
	}
	return lists
}
func main() {
    dir,_:=os.Getwd()
	rootfolder:=dir+FileSeparatorChar+"files"
	listFiles :=GetDirFileList(rootfolder,1)
	for index, f := range listFiles {
  	    //listFiles[index].Path=strings.Replace(f.Path,rootfolder,"",1)
		LogD("Index1: ", index, " = ", f.IsDir,f.Path,",",f.Name,f.Size,f.Time,f.Level)
	}
}

结果

2019/09/10 10:10:03 [Index:  0  =  true D:\rd\beego\src\go_demo\files , golang111 0  1]
2019/09/10 10:10:03 [Index:  1  =  false D:\rd\beego\src\go_demo\files\golang111 , z11.md 611  2]
2019/09/10 10:10:03 [Index:  2  =  false D:\rd\beego\src\go_demo\files\golang111 , z22).txt 609  2]
2019/09/10 10:10:03 [Index:  3  =  false D:\rd\beego\src\go_demo\files\golang111 , z33.md 29  2]
2019/09/10 10:10:03 [Index:  4  =  true D:\rd\beego\src\go_demo\files , java22 0  1]
2019/09/10 10:10:03 [Index:  5  =  true D:\rd\beego\src\go_demo\files , k33 0  1]
2019/09/10 10:10:03 [Index:  6  =  false D:\rd\beego\src\go_demo\files\k33 , k44.txt 785  2]
2019/09/10 10:10:03 [Index:  7  =  false D:\rd\beego\src\go_demo\files\k33 , k55.txt 850  2]
2019/09/10 10:10:03 [Index:  8  =  false D:\rd\beego\src\go_demo\files , 111.md 611  1]
2019/09/10 10:10:03 [Index:  9  =  false D:\rd\beego\src\go_demo\files , 222.txt 609  1]
2019/09/10 10:10:03 [Index:  10  =  false D:\rd\beego\src\go_demo\files , 333.txt 29  1]
2019/09/10 10:10:03 [Index:  11  =  false D:\rd\beego\src\go_demo\files , 444.html 518  1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值