main.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "os"
  7. )
  8. func main() {
  9. dirTree(os.Stdout, "..", true)
  10. }
  11. func dirTree(output io.Writer, currDir string, printFile bool) error {
  12. recursionDirTree(currDir, false)
  13. return nil
  14. }
  15. // todo Разобраться с log, err.Error
  16. func recursionDirTree(currDir string, printFiles bool) {
  17. fileObj, err := os.Open(currDir)
  18. defer fileObj.Close()
  19. if err != nil {
  20. log.Fatalf("Could not open %s: %s", currDir, err.Error())
  21. }
  22. files, err := os.ReadDir(fileObj.Name())
  23. if err != nil {
  24. log.Fatalf("Could not read dir names in %s: %s", currDir, err.Error())
  25. }
  26. // os.ReadDir возвращает отсортированный слайс DirEntry
  27. var sortedFilesNameArr []string = []string{}
  28. var filesMap map[string]os.DirEntry = map[string]os.DirEntry{}
  29. for _, file := range files {
  30. sortedFilesNameArr = append(sortedFilesNameArr, file.Name())
  31. filesMap[file.Name()] = file
  32. }
  33. fmt.Println(files)
  34. // Превращаем слайс всех объектов (файлов и папок) в слайс только папок
  35. // если printFiles == false
  36. var dirList []os.DirEntry = []os.DirEntry{}
  37. if !printFiles {
  38. for _, file := range files {
  39. if file.IsDir() {
  40. dirList = append(dirList, file)
  41. }
  42. }
  43. files = dirList
  44. }
  45. var length int = len(files)
  46. fmt.Println(length)
  47. // for i, file := range files{}
  48. // fmt.Println(files)
  49. // fmt.Println(unSortedFilesNameArr)
  50. // fmt.Println(sortedFilesArr)
  51. // fmt.Printf("%T\n", files[0])
  52. // fmt.Println(files)
  53. }