golang 获取文件树信息

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]
Golang中的哈夫曼树编码是一种数据压缩算法,适用于将大数据量进行高效的压缩和解压缩操作。哈夫曼树编码的原理是根据字符出现的频率构建一棵树,出现频率较高的字符使用较短的编码,出现频率较低的字符使用较长的编码,从而实现数据的压缩。 在Golang中,可以使用哈夫曼树编码库来实现这一算法。首先,需要统计字符的出现频率,可以通过遍历待压缩的数据来进行统计。然后,根据字符的频率构建哈夫曼树,可以使用优先队列或堆来实现。 一旦构建好了哈夫曼树,就可以生成每个字符对应的哈夫曼编码。编码过程中,从根节点开始,遍历树的路径,当遇到左子树时将路径上加入0,遇到右子树时加入1,直到到达叶子节点,将路径上的编码记录下来。最终,每个字符对应的哈夫曼编码就是根据路径上的0和1组成的。 对于压缩数据,在编码时将每个字符替换成对应的哈夫曼编码,将压缩后的编码写入到新的文件中。对于解压缩数据,需要读取压缩文件中的编码,根据哈夫曼树的结构进行逐个字符的解码操作。 总而言之,Golang中的哈夫曼树编码是一种高效的数据压缩算法,通过统计字符出现的频率构建哈夫曼树,然后生成每个字符对应的哈夫曼编码,从而实现数据的压缩和解压缩操作。通过使用相关的库,可以方便地实现这一算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值