Parfois, quand je regarde mon répertoire, ou que je veux trouver un fichier, surtout quand il y a beaucoup de répertoires, je me sens toujours un peu inconfortable.
Par exemple, ce répertoire est l'un de mes répertoires de tutoriels.
Mais je ne peux pas clairement savoir ce qu'il y a dans chaque dossier , et c'est très difficile de trouver un fichier à chaque fois.
Donc, sur la base des exigences ci-dessus, en utilisant le langage Go, j'ai finalement créé un générateur d'annuaire, qui fait du bien.
通过编写的脚本,可以将目录整合成.txt
文件,并且下级目录使用4个空格
缩进。
先别管怎么实现的,先看代码。
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 "生成相同字符的个数" // @param char byte "生成相同字符的字符" // @param current_tier int "当前层数" // @param end_tier int "终止层数" // @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() //生成指定数目的相同符号 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 -h Usage of main.exe: -path string 目录 -tier int 终止层数
语法
main.exe -path <要生成的目录> -tier <终止层级> 注意:-tier,终止层数,0表示无限层,>0表示指定层数,默认为0
示例
此处-tier
指定的是0,表示无限制生成,如果指定是1,就表示生成一层。
结果
Il y aura un supplémentaire dans l'annuaire à générer. 目录.txt
Compréhension du code principal
fileObj
Déterminer s'il s'agit d'un répertoire, récursivement
Résumé
Mais un plus grand avantage de Go est qu'il peut être compilé en exe
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!