@sergey_fs

Как вычислить последний файл в директории?

Можете помочь с решением задачи как сделать отступы в папках директории
чтобы было как в примере
go run main.go . -f
├───main.go (1881b)
├───main_test.go (1318b)
└───testdata
├───project
│ ├───file.txt (19b)
│ └───gopher.png (70372b)
├───static
│ ├───css
│ │ └───body.css (28b)
│ ├───html
│ │ └───index.html (57b)
│ └───js
│ └───site.js (10b)
├───zline
│ └───empty.txt (empty)
└───zzfile.txt (empty)

на данный момент вывод программы такой
PS C:\Users\User\Desktop\GoLang_Projects\src\coursera\hw1> go run .\main.go -f
├───main.go (2238b)
├───main_test.go (1865b)
├───testdata
└───project
├───file.txt (19b)
├───gopher.png (70372b)
└───static
└───a_lorem
├───dolor.txt (empty)
├───gopher.png (70372b)
├───ipsum
├───gopher.png (70372b)
└───css
├───body.css (28b)
└───empty.txt (empty)
└───html
├───index.html (57b)
└───js
├───site.js (10b)
└───z_lorem
├───dolor.txt (empty)
├───gopher.png (70372b)
├───ipsum
├───gopher.png (70372b)
└───zline
├───empty.txt (empty)
├───lorem
├───dolor.txt (empty)
├───gopher.png (70372b)
├───ipsum
├───gopher.png (70372b)
└───zzfile.txt (empty)

Вопрос как сделатьь отступы как на примере выше

package main

import (
	"io"
	"os"
	"log"
	"fmt"
	"path/filepath"
	"sort"
	"io/ioutil"
)

var (
	err error

)

func main() {
	out := os.Stdout
	if !(len(os.Args) == 2 || len(os.Args) == 3) {
		panic("usage go run main.go . [-f]")
	}
	path := os.Args[1]
	printFiles := len(os.Args) == 3 && os.Args[2] == "-f"
	err := dirTree(out, path, printFiles)
	if err != nil {
		panic(err.Error())
	}
}

func dirTree(out io.Writer, filePath string, printFiles bool) error   {
	var fileFolder []string  //обьявили массив
///получаю домашнюю директорию пользователя
	home := func(path string, info os.FileInfo, err error) error {
		fileFolder = append(fileFolder,path)
		return nil
	}
	err := filepath.Walk("./", home)
	if err != nil {
		log.Fatal(err)
	}
	sort.Strings(fileFolder) //отсортировали массив
	var sortData []string
	//делаю итерацию по массиву удаляю из массива не нужные файлы
	for k := range fileFolder {
		if fileFolder[k] == "hw1.md" || fileFolder[k] == "dockerfile"  || fileFolder[k] == "./" {
			//log.Println("Err Data is Missing ")
			}else {
			sortData = append(sortData,fileFolder[k])
		}
	}
	//делаем итерацию по отсортированному массиву
	for i := range sortData {
		//getFileSize(sortData[i])
		//element := sortData[i]+getFileSize(sortData[i])
		//выводи данные из массива
		fmt.Println(getTREE(sortData[i])+getFileSize(sortData[i]))
	}
	return  err
}
//Размер файла в домашней директории
func getFileSize(path string) string  {
	var fileSize string
	fileInfo, _ := os.Stat(path)
	if !fileInfo.IsDir() {
		size := fileInfo.Size()
		if size == 0 {
			fileSize = " (empty)"
		} else {
			fileSize = fmt.Sprintf(" (%vb)", size)
		}
	}
	return fileSize
}

func getTREE(path string)  string  {

	var  tabResult string

	files, err := ioutil.ReadDir(filepath.Dir(path))
	if err != nil {
		log.Fatal(err)
	}

	for _, file := range files {
		if file.IsDir() {
			tabResult =   `└───`+filepath.Base(path)
		} else {
			tabResult =  `├───`+filepath.Base(path)
		}
		return  tabResult
	}
  return tabResult
}
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Boomstarter Москва
от 110 000 до 160 000 руб.
TechOps Москва
от 3 000 до 4 500 usd.
2Reallife Москва
от 100 000 до 130 000 руб.
18 авг. 2018, в 11:06
10000 руб./за проект
18 авг. 2018, в 10:13
500 руб./в час
18 авг. 2018, в 09:13
13000 руб./за проект