前言有时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。
比如这个目录,是我的一个教程目录。
但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。
所以,基于上述的需求,使用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 "需要生成的目录"// @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
-help
采用flag包动态控制参数,参数如下。
d:>main.exe -husage of main.exe: -path string 目录 -tier int 终止层数
运行
语法
main.exe -path <要生成的目录> -tier <终止层级>注意:-tier,终止层数,0表示无限层,>0表示指定层数,默认为0
示例
此处-tier指定的是0,表示无限制生成,如果指定是1,就表示生成一层。
结果
会在要生成的目录下,多出一个目录.txt。
打开如下
主要代码理解
flag
fileobj
判断是否为目录,递归
总结
本次更像是日常使用中,为了解决实际问题的脚本,其实脚本使用python更好。
但是go有一个更大的优势就是可以编译为exe。
以上就是手把手教你用go语言开发一款简易目录生成器的详细内容。