有時候,我看著我的目錄,或者我想找個文件時,尤其是目錄很多時,總是有點難受。
比如這個目錄,是我的一個教程目錄。
但是我并不能一目了然的知道每個文件夾下都有啥,并且每次找一個文件也很費事。
所以,基于上述的需求,使用Go語言,終于擼了個目錄生成器,感覺還行。
通過編寫的腳本,可以將目錄整合成.txt文件,并且下級目錄使用4個空格縮進。
先別管怎么實現的,先看代碼。
package mainimport ( "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 "需要生成的目錄"http:// @param count int "生成相同字符的個數"http:// @param char byte "生成相同字符的字符"http:// @param current_tier int "當前層數"http:// @param end_tier int "終止層數"http:// @param fileObj int "文件對象"http:// @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() //生成指定數目的相同符號 var plac = GenderNSymbol(char, count) //符號+目錄 var sname = fmt.Sprintf("%s%s/n", plac, name) //輸出當前目錄 fileObj.WriteString(sname) //fmt.Println(sname) //判斷是否為目錄,如果是,繼續下次遞歸 var isDir = file.IsDir() if isDir { //拼接傳入的目錄和循環的當前目錄 var nerPaht = filepath.Join(path, name) GenderDirTree(nerPaht, count+4, char, current_tier, end_tier, fileObj) }}}func main() { //終止層數,0表示無限層,>0表示指定層數 var end_tier int //輸入的目錄 //var path = `D:/0_教程/易錦教程` var path string flag.StringVar(&path, "path", "", "目錄") flag.IntVar(&end_tier, "tier", 0, "終止層數") 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行代碼,就實現了這個功能。
go build main.go
采用flag包動態控制參數,參數如下。
d:>main.exe -hUsage of main.exe: -path string 目錄 -tier int 終止層數
main.exe -path <要生成的目錄> -tier <終止層級>注意:-tier,終止層數,0表示無限層,>0表示指定層數,默認為0
此處-tier指定的是0,表示無限制生成,如果指定是1,就表示生成一層。
會在要生成的目錄下,多出一個目錄.txt。
本次更像是日常使用中,為了解決實際問題的腳本,其實腳本使用Python更好。
但是Go有一個更大的優勢就是可以編譯為exe。
這次的難點主要是理解遞歸,自己調自己!
本文鏈接:http://www.www897cc.com/showinfo-26-57881-0.html手把手教你用Go語言開發一款簡易目錄生成器
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 在 Rust 編程中使用多線程