Advertisement
Guest User

todo

a guest
Dec 11th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.19 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "fmt"
  5.     "io"
  6.     "os"
  7.     "sort"
  8. )
  9.  
  10. func main() {
  11.     out := os.Stdout
  12.     if !(len(os.Args) == 2 || len(os.Args) == 3) {
  13.         panic("usage go run main.go . [-f]")
  14.     }
  15.     path := os.Args[1]
  16.     printFiles := len(os.Args) == 3 && os.Args[2] == "-f"
  17.     err := dirTree(out, path, printFiles)
  18.     if err != nil {
  19.         panic(err.Error())
  20.     }
  21. }
  22. func dirTree(out io.Writer, path string, withFiles bool) error {
  23.     return dirTreeLeveled(out, path, withFiles, 0)
  24. }
  25.  
  26. // todo
  27. func dirTreeLeveled(out io.Writer, path string, withFiles bool, level int) error {
  28.     dir, err := os.Open(path)
  29.     if err != nil {
  30.         return err
  31.     }
  32.     files, err := dir.Readdir(0)
  33.     sort.Slice(files, func(i, j int) bool {
  34.         return files[i].Name() < files[j].Name()
  35.     })
  36.     for i, f := range files {
  37.         if (!withFiles && !f.IsDir()) {
  38.             continue
  39.         }
  40.  
  41.         for j := 0; j < level; j++ {
  42.             fmt.Print("\t")
  43.         }
  44.         if i == len(files)-1 {
  45.             fmt.Print("└───")
  46.         } else {
  47.             fmt.Print("├───")
  48.         }
  49.         fmt.Printf("%s\n", f.Name())
  50.         if (f.IsDir()) {
  51.             errInner := dirTreeLeveled(out, path+string(os.PathSeparator)+f.Name(), withFiles, level+1)
  52.             if errInner != nil {
  53.                 return errInner
  54.             }
  55.         }
  56.     }
  57.     return nil
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement