Listing the contents of a directory in go and sorting by filename.
To get the list of file we will use the ReadDir function from the os package.
To sort the files we will use the sort package to arrange the filenames alphabetically ascending or descending.
package main
import (
"fmt"
"io/fs"
"log"
"os"
"sort"
)
func checkErr(err error) {
if err != nil {
log.Fatal(err)
}
}
// this is the default sort order of golang ReadDir
func SortFileNameAscend(files []fs.DirEntry) {
sort.Slice(files, func(i, j int) bool {
return files[i].Name() < files[j].Name()
})
}
func SortFileNameDescend(files []fs.DirEntry) {
sort.Slice(files, func(i, j int) bool {
return files[i].Name() > files[j].Name()
})
}
func printFiles(files []fs.DirEntry) {
for _, file := range files {
fileInfo, err := file.Info()
checkErr(err)
fmt.Println(file.Name(), fileInfo.Size(), fileInfo.ModTime())
}
}
func main() {
files, err := os.ReadDir(".")
if err != nil {
log.Fatal(err)
}
//SortFileNameAscend(files)
printFiles(files)
fmt.Println("\n-----------------------------------\n")
SortFileNameDescend(files)
printFiles(files)
}