main.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. )
  6. func main() {
  7. out := os.Stdout
  8. // Первый аргумент - путь, второй - опция
  9. if !(len(os.Args) == 2 || len(os.Args) == 3) {
  10. panic("usage go run main.go . [-f]")
  11. }
  12. path := os.Args[1]
  13. printFiles := len(os.Args) == 3 && os.Args[2] == "-f"
  14. err := dirTree(out, path, printFiles)
  15. if err != nil {
  16. panic(err.Error())
  17. }
  18. // fmt.Println(path, printFiles, len(os.Args))
  19. // fmt.Printf("%T\n", out, err)
  20. }
  21. func dirTree(file *os.File, path string, printFiles bool) error {
  22. var staticFile = file
  23. fmt.Println("Function tree")
  24. fmt.Println(file, path, printFiles)
  25. // Открыть текущую директорию
  26. dir, err := os.Open(path)
  27. if err != nil {
  28. // return err.Error()
  29. return err
  30. }
  31. defer dir.Close()
  32. // Получаем список файлов и папок
  33. files, err := dir.Readdir(-1)
  34. if err != nil {
  35. return err
  36. }
  37. // Выводим имена файлов и папок
  38. for _, file := range files {
  39. if file.IsDir() {
  40. fmt.Println("Directory: ", file.Name())
  41. dirTree(staticFile, path, printFiles)
  42. } else {
  43. fmt.Println(file.Name())
  44. }
  45. }
  46. /*
  47. file, err := os.Open("file.go") // For read access.
  48. if err != nil {
  49. log.Fatal(err)
  50. }
  51. */
  52. return nil
  53. }