Dmitry Telenkov 1 gün önce
ebeveyn
işleme
6c8199a377

+ 1 - 1
go/stepik/course_3/base/task/foo1.go

@@ -11,7 +11,7 @@ import (
 )
 
 func main() {
-	dirTree(os.Stdout, "..", true)
+	dirTree(os.Stdout, "..", false)
 }
 
 func dirTree(output io.Writer, currDir string, printFiles bool) error {

+ 63 - 3
go/stepik/course_3/base/task/main.go

@@ -5,10 +5,13 @@ import (
 	"io"
 	"log"
 	"os"
+	"path/filepath"
 )
 
 func main() {
-	dirTree(os.Stdout, "..", true)
+	// dirTree(os.Stdout, "..", true)
+	foo("", os.Stdout, "..", false)
+	// foo("..", false)
 }
 
 func dirTree(output io.Writer, currDir string, printFile bool) error {
@@ -16,6 +19,65 @@ func dirTree(output io.Writer, currDir string, printFile bool) error {
 	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)
@@ -38,8 +100,6 @@ func recursionDirTree(currDir string, printFiles bool) {
 		filesMap[file.Name()] = file
 	}
 
-	fmt.Println(files)
-
 	// Превращаем слайс всех объектов (файлов и папок) в слайс только папок
 	// если printFiles == false
 	var dirList []os.DirEntry = []os.DirEntry{}