GO语言学习笔记(三) - 递归查找目录及子目录下的文件
GO语言学习笔记(三) - 递归查找目录及子目录下的文件
递归查找目录及子目录下的文件
递归查找文件夹及子文件夹下的文件
代码
package main import ( "fmt" "io/ioutil" "os" "strings" ) // 查找目录及子目录下的文件 // 添加参数判断 // path : 目标目录 // files : 容纳所有文件路径的结果数组 // targetType : 目标文件类型 // ignoreFile : 忽略文件(文件名,包括扩展名) // ignorePath : 忽略目录 // ignoreType : 忽略文件类型 func GetAllFile(path string, files *[]string, targetType *[]string, ignoreFile *[]string, ignorePath *[]string, ignoreType *[]string) (err error) { if !isAllEmpty(targetType) && !isAllEmpty(ignoreType) { fmt.Printf("WARNGING: 目标文件类型已指定, 忽略文件类型无须指定。后续处理中忽略文件类型作为空处理\n") } err = getAllFileRecursion(path, files, targetType, ignoreFile, ignorePath, ignoreType) return err; } // 递归查找目录及子目录下的文件 // path : 目标目录 // files : 容纳所有文件路径的结果数组 // targetType : 目标文件类型 // ignoreFile : 忽略文件(文件名,包括扩展名) // ignorePath : 忽略目录 // ignoreType : 忽略文件类型 func getAllFileRecursion(path string, files *[]string, targetType *[]string, ignoreFile *[]string, ignorePath *[]string, ignoreType *[]string) (err error) { l, err := ioutil.ReadDir(path) if err != nil { return err } separator := string(os.PathSeparator) for _, f := range l { tmp := string(path + separator + f.Name()) if f.IsDir() { // 过滤被忽略的文件夹(文件夹名完全相同) if !isInArray(ignorePath, f.Name()) { err = getAllFileRecursion(tmp, files, targetType, ignoreFile, ignorePath, ignoreType) if err != nil { return err } } } else { // 目标文件类型被指定 if !isAllEmpty(targetType) { // 属于目标文件类型 if isInSuffix(targetType, f.Name()) { // 忽略文件为空 或者 目标文件中不含有指定忽略文件 if isAllEmpty(ignoreFile) || !isInArray(ignoreFile, f.Name()) { *files = append(*files, tmp) } } } else { // 目标文件类型为空 // 忽略文件类型被指定 if !isAllEmpty(ignoreType) { // 不属于忽略文件类型 if !isInSuffix(ignoreType, f.Name()) { // 忽略文件为空 或者 目标文件中不含有指定忽略文件 if isAllEmpty(ignoreFile) || !isInArray(ignoreFile, f.Name()) { *files = append(*files, tmp) } } } else { // 忽略文件类型为空 // 忽略文件为空 或者 目标文件中不含有指定忽略文件 if isAllEmpty(ignoreFile) || !isInArray(ignoreFile, f.Name()) { *files = append(*files, tmp) } } } } } return nil } // 判断目标字符串是否是在数组中 func isInArray(list *[]string, s string) (isIn bool) { if len(*list) == 0 { return false } isIn = false for _, f := range *list { if f == s { isIn = true break } } return isIn } // 判断目标字符串的末尾是否含有数组中指定的字符串 func isInSuffix(list *[]string, s string) (isIn bool) { isIn = false for _, f := range *list { if strings.TrimSpace(f) != "" && strings.HasSuffix(s, f) { isIn = true break } } return isIn } // 判断数组各元素是否是空字符串或空格 func isAllEmpty(list *[]string) (isEmpty bool) { if len(*list) == 0 { return true } isEmpty = true for _, f := range *list { if strings.TrimSpace(f) != "" { isEmpty = false break } } return isEmpty } func main() { fmt.Printf("Info: Start\n") targetType := []string{".js", "", ""} ignoreFile := []string{"index.js"} ignorePath := []string{".git"} ignoreType := []string{".gitignore", ".exe"} var files []string var path = "C:\\Users\\Administrator\\go\\src\\github.com\\bettersun\\hellogo" err := GetAllFile(path, &files, &targetType, &ignoreFile, &ignorePath, &ignoreType) if err != nil { fmt.Printf(err.Error() + "\n") } fmt.Printf("文件名(全路径)列表:\n") for _, file := range files { fmt.Printf(" [%s]\n", file) } fmt.Printf("Info: End\n") }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【转】前端——实用UI组件库
Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: https://github.com/valor-software/ngx-bootstrap NG-bootstrap bootstrap4组件 官网:https://ng-bootstrap.github.io/#/home NG-ZORRO 0.5,0.6两个版本分别支持angular4.x和5.x https://ng.ant.design/#/docs/angular/introduce, NG-alain https://cipchk.github.io/ng-alain/#/dashboard/v1 github: https://github.com/cipchk/ng-alain NGX-admin http://akveo.com/ngx-admin/#/pages/dashboard primeng 一个丰富的组件库,并且有不同的主题可供选择 https://www.p...
- 下一篇
囤书正当时,这些口碑好书值得买
一直有人留言,小编什么时候买书有优惠?尤其是《深度学习》这本AI圣经,今天这个机会来了,当当百万图书每买100减50元,囤书正当时,这些口碑好书值得买。 这些好书包含以下类别:人工智能、算法、Python、微服务、异步经典书TOP10、少儿编程以及近期关注度最高的异步新书。 人工智能篇 《人工智能(第2版)》 [美]史蒂芬·卢奇(Stephen Lucci) 著 美国经典入门教材,被誉为人工智能领域百科全书。人工智能领域近十年来最前沿教程,更加适合本科生使用。 本书基于人工智能的理论基础, 向读者展示全面、新颖、丰富多彩且易于理解的人工智能知识体系。本书给出诸多的示例、应用程序、全彩图片和人物轶事,以激发读者的阅读和学习兴趣;还引入了机器人和机器学习的相关高级课程,包括神经网络、遗传算法、自然语言处理、规划和复杂的棋盘博弈等。 《深度学习原理与实践》 陈仲铭,彭凌西著 本书系统全面、循序渐进地介绍了深度学习的各方面知识,包括技术经验、使用技巧和实践案例。本书详细介绍了目前深度学习相关的常用网络模型,以及不同网络模型的算法原理和核心思想。本书利用大量的实例代码对网络模型进行了分析,这...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7安装Docker,走上虚拟化容器引擎之路