Golang ioutil.ReadDir 读取目录下的内容并排序
之前写的https://www.cnblogs.com/pu369/p/10620731.html一文中,也有对slice的排序,但代码乱的自己也看不下去了。
参考https://blog.csdn.net/zhangyexinaisurui/article/details/82688618准备读目录,并按时间排序
一、与参考内容一样,直接读目录,默认是按名字排序
package main import ( "fmt" "io/ioutil" ) func listAll(path string, curHier int) { readerInfos, err := ioutil.ReadDir(path) if err != nil { fmt.Println(err) return } for _, info := range readerInfos { if info.IsDir() { for tmpheir := curHier; tmpheir > 0; tmpheir-- { fmt.Printf("|\t") } fmt.Println(info.Name(), "\\") listAll(path+"\\"+info.Name(), curHier+1) } else { for tmpheir := curHier; tmpheir > 0; tmpheir-- { fmt.Printf("|\t") } fmt.Println(info.Name(), " ", info.ModTime()) } } } func main() { // dir := os.Args[1] dir := "I:/img" listAll(dir, 0) }
二、改为按[]os.FileInfo的 info.ModTime()排序
package main import ( "fmt" "io/ioutil" "os" "sort" ) func listAll(path string, curHier int) { readerInfos, err := ioutil.ReadDir(path) if err != nil { fmt.Println(err) return } readerInfos1 := sortByTime(readerInfos) for _, info := range readerInfos1 { if info.IsDir() { for tmpheir := curHier; tmpheir > 0; tmpheir-- { fmt.Printf("|\t") } fmt.Println(info.Name(), "\\") listAll(path+"\\"+info.Name(), curHier+1) } else { for tmpheir := curHier; tmpheir > 0; tmpheir-- { fmt.Printf("|\t") } fmt.Println(info.Name(), " ", info.ModTime()) } } } func main() { // dir := os.Args[1] dir := "I:/img" listAll(dir, 0) } func sortByTime(pl []os.FileInfo) []os.FileInfo { sort.Slice(pl, func(i, j int) bool { flag := false if pl[i].ModTime().After(pl[j].ModTime()) { flag = true } else if pl[i].ModTime().Equal(pl[j].ModTime()) { if pl[i].Name() < pl[j].Name() { flag = true } } return flag }) return pl }