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]