| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- package main
- import (
- "fmt"
- "io"
- "log"
- "os"
- "path/filepath"
- )
- func main() {
- // dirTree(os.Stdout, "..", true)
- foo("", os.Stdout, "..", false)
- // foo("..", false)
- }
- func dirTree(output io.Writer, currDir string, printFile bool) error {
- recursionDirTree(currDir, false)
- return nil
- }
- func foo(prependingString string, output io.Writer, dir string, print bool) {
- fileObj, err := os.Open(dir)
- defer fileObj.Close()
- if err != nil {
- log.Fatalf("Could not open %s: %s", dir, err.Error())
- }
- // files - слайс fs.DirEntry
- // os.ReadDir возвращает отсортированный слайс DirEntry
- files, err := os.ReadDir(fileObj.Name())
- if err != nil {
- log.Fatalf("Could not read dir names in %s: %s", dir, err.Error())
- }
- var filesMap map[string]os.DirEntry = map[string]os.DirEntry{}
- var sortedFilesNameArr []string = []string{}
- for _, file := range files {
- sortedFilesNameArr = append(sortedFilesNameArr, file.Name())
- filesMap[file.Name()] = file
- }
- var newFileList []os.DirEntry = []os.DirEntry{}
- var length int
- // Печатаем только папки
- if !print {
- for _, file := range files {
- if file.IsDir() {
- newFileList = append(newFileList, file)
- }
- }
- files = newFileList
- }
- length = len(files)
- for i, file := range files {
- if file.IsDir() {
- var stringPrepender string
- if length > i+1 {
- fmt.Fprintf(output, prependingString+"├───"+"%s\n", file.Name())
- stringPrepender = prependingString + "│\t"
- } else {
- fmt.Fprintf(output, prependingString+"└───"+"%s\n", file.Name())
- stringPrepender = prependingString + "\t"
- }
- newDir := filepath.Join(dir, file.Name())
- fmt.Println("newDir", newDir, stringPrepender)
- }
- }
- /*
- fmt.Println(sortedFilesNameArr)
- fmt.Println(filesMap)
- fmt.Println(files)
- */
- }
- // todo Разобраться с log, err.Error
- func recursionDirTree(currDir string, printFiles bool) {
- fileObj, err := os.Open(currDir)
- defer fileObj.Close()
- if err != nil {
- log.Fatalf("Could not open %s: %s", currDir, err.Error())
- }
- files, err := os.ReadDir(fileObj.Name())
- if err != nil {
- log.Fatalf("Could not read dir names in %s: %s", currDir, err.Error())
- }
- // os.ReadDir возвращает отсортированный слайс DirEntry
- var sortedFilesNameArr []string = []string{}
- var filesMap map[string]os.DirEntry = map[string]os.DirEntry{}
- for _, file := range files {
- sortedFilesNameArr = append(sortedFilesNameArr, file.Name())
- filesMap[file.Name()] = file
- }
- // Превращаем слайс всех объектов (файлов и папок) в слайс только папок
- // если printFiles == false
- var dirList []os.DirEntry = []os.DirEntry{}
- if !printFiles {
- for _, file := range files {
- if file.IsDir() {
- dirList = append(dirList, file)
- }
- }
- files = dirList
- }
- var length int = len(files)
- fmt.Println(length)
- // for i, file := range files{}
- // fmt.Println(files)
- // fmt.Println(unSortedFilesNameArr)
- // fmt.Println(sortedFilesArr)
- // fmt.Printf("%T\n", files[0])
- // fmt.Println(files)
- }
|