|
|
@@ -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{}
|