回復“Go語言”即可獲贈從入門到進階共10本電子書 前言有時候,我看著我的目錄,或者我想找個文件時,尤其是目錄很多時,總是有點難受。 比如這個目錄,是我的一個教程目錄。
但是我并不能一目了然的知道每個文件夾下都有啥,并且每次找一個文件也很費事。 所以,基于上述的需求,使用Go語言,終于擼了個目錄生成器,感覺還行。 實現(xiàn)的效果通過編寫的腳本,可以將目錄整合成.txt 文件,并且下級目錄使用4個空格 縮進。
代碼先別管怎么實現(xiàn)的,先看代碼。 package main
import ( "bytes" "flag" "fmt" "io/ioutil" "os" "path/filepath" )
func GenderNSymbol(char byte, count int) string { symbolSince := bytes.Repeat([]byte{char}, count) var symbol = string(symbolSince) return symbol }
// @title GenderDirTree // @description 生成目錄樹 // @param path string "需要生成的目錄" // @param count int "生成相同字符的個數(shù)" // @param char byte "生成相同字符的字符" // @param current_tier int "當前層數(shù)" // @param end_tier int "終止層數(shù)" // @param fileObj int "文件對象" // @return 無 無 "無" func GenderDirTree(path string, count int, char byte, current_tier int, end_tier int, fileObj *os.File) { if !(current_tier < end_tier) && end_tier != 0 { return } current_tier++ files, err := ioutil.ReadDir(path) if err != nil { fmt.Println("錯誤:目錄錯誤") return } for _, file := range files { var name = file.Name() //生成指定數(shù)目的相同符號 var plac = GenderNSymbol(char, count) //符號+目錄 var sname = fmt.Sprintf("%s%s\n", plac, name) //輸出當前目錄 fileObj.WriteString(sname) //fmt.Println(sname) //判斷是否為目錄,如果是,繼續(xù)下次遞歸 var isDir = file.IsDir() if isDir { //拼接傳入的目錄和循環(huán)的當前目錄 var nerPaht = filepath.Join(path, name) GenderDirTree(nerPaht, count+4, char, current_tier, end_tier, fileObj) } } }
func main() { //終止層數(shù),0表示無限層,>0表示指定層數(shù) var end_tier int //輸入的目錄 //var path = `D:\0_教程\易錦教程` var path string flag.StringVar(&path, "path", "", "目錄") flag.IntVar(&end_tier, "tier", 0, "終止層數(shù)") flag.Parse() //文件對象 var wDirPath = filepath.Join(path, "目錄.txt") fileObj, _ := os.OpenFile(wDirPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) defer fileObj.Close() //生成目錄樹 GenderDirTree(path, 0, ' ', 0, end_tier, fileObj) }
去掉注釋,其實也就30行代碼,就實現(xiàn)了這個功能。
實現(xiàn)的功能自定義要生成的目錄。 自定義生成目錄終止的層數(shù)。
打包-help
采用flag 包動態(tài)控制參數(shù),參數(shù)如下。 d:>main.exe -h Usage of main.exe: -path string 目錄 -tier int 終止層數(shù)
運行
語法 main.exe -path <要生成的目錄> -tier <終止層級> 注意:-tier,終止層數(shù),0表示無限層,>0表示指定層數(shù),默認為0
示例
此處-tier 指定的是0,表示無限制生成,如果指定是1,就表示生成一層。 結果
會在要生成的目錄下,多出一個目錄.txt 。 打開如下
主要代碼理解
flagfileObj
判斷是否為目錄,遞歸
總結
本次更像是日常使用中,為了解決實際問題的腳本,其實腳本使用Python更好。 但是Go有一個更大的優(yōu)勢就是可以編譯為exe 。 這次的難點主要是理解遞歸,自己調(diào)自己! 如果在操作過程中有任何問題,記得下面留言,我們看到會第一時間解決問題。 如果你覺得文章還可以,記得點贊留言支持我們哈。感謝你的閱讀,有問題請記得在下方留言噢~
|