golang 获取指定目录下的子文件列表
GO语言按照深度遍历文件
go语言提供了大量的包,基于这些包我们可以完成很多有意思的事情,本节我们就来看看如何利用go语言来遍历文件。
常规方法(不使用path/filepath包)
比较直观的方式是,按照某个目录递归的方式便利文件:
func walkDir(dirpath string, depth int){
    if depth > DEPTH{//大于设定的深度
        return
    }
    files, err := ioutil.ReadDir(dirpath)//读取目录下文件
    if err != nil{
        return
    }
    for _, file := range files{
        if file.IsDir(){
            walkDir(dirpath + "/" + file.Name(), depth+1)
            continue
        }else{
                .....
        }
    }
}
- 先利用ioutil包中的ReadDir方法读取该目录下Dir信息
- 根据返回的file信息判断其是否为目录- 如果是目录则递归调用walkDir方法
- 否则对文件进行处理
 
- 如果是目录则递归调用
这就完成了对文件的一个遍历,这样的遍历操作简单。当然由于递归调用,因此比较消耗内存。
go的filepath包
filepath包实现了兼容各个操作系统的文件路径实用操作方法
本次用到的主要是两个方法
| 方法 | 定义 | 
|---|---|
| WalkFunc | type WalkFunc func(path string, info os.FileInfo, err error) erro | 
| Walk | func Walk(root string, walkFc WalkFunc) error | 
我们可以看到其实在Walk里面有一个WalkFunc方法的调用,其作用是用来过滤。
Walk(root stirng, walkFn WalkFunc) error方法
walk方法会遍历root下的所有文件(包含root)并对每一个目录和文件都调用walkFunc方法。在访问文件和目录时发生的错误都会通过error参数传递给WalkFunc方法。文件是按照词法顺序进行遍历的,这个通常让输出更漂亮,但是也会导致处理非常大的目录时效率会降低。另外,walk函数不会遍历符号链接。
- 1
- 2
WalkFunc(path string, info os.FileInfo, err error) error函数
Walk函数在遍历文件时调用。调用时将参数传递给path,这是一个绝对路径,也就是Walk函数中的root作为前缀。将root + 文件名作为path传递给WalkFunc函数。例如在"Dir"目录下遍历到"a"文件,则path="Dir/a"
Info是path所指向文件的文件信息。如果在遍历过程中出现了问题,传入参数err会描述这个问题。WalkFunc函数可以处理这个问题,Walk将不会再深入该目录。如果函数会返回一个错误,Walk函数会终止执行;只有一个例外,我们也通常用这个来跳过某些目录。当WalkFunc的返回值是filepaht.SkipDir时,Walk将会跳过这个目录,照常执行下一个文件。
- 1
- 2
- 3
- 4
例子:
import "path/filepath"
func walkDir(dir string){
    files, err := ioutil.ReadDir(dir)
    if err != nil{
        ...
    }
    for _, file := range files{
        filename := file.Name()
        filepath.Walk(filename,func(path string, fi os.FileInfo, err error)error{
            depth := strings.Count(path,"/") - strings.Count(filename,"/")
            if depth > DEPTH{
                return filepath.SkipDir
            }
            if err != nil{
                //处理文件读取异常
            }
            if fi.IsDir(){
                满足条件不用管
                不满足条件
                return filepath.SkipDir
            }
        })
    }
}golang 获取指定目录下的子文件列表的更多相关文章
- php递归查找指定目录下及子文件名称是否包含中文空格及括号
		//php递归查找该目录下及子文件名称是否包含中文空格括号 function searchDir($path,&$data){ if(is_dir($path)){ $dp=dir($path ... 
- php获取指定目录下的所有文件列表
		在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ... 
- c# 获取指定目录下的所有文件并显示在网页上
		参考文献: FileInfo 的使用 https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ... 
- python获取指定目录下所有文件名os.walk和os.listdir
		python获取指定目录下所有文件名os.walk和os.listdir 觉得有用的话,欢迎一起讨论相互学习~Follow Me os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文 ... 
- C++:获取指定目录下的所有文件
		1.获得指定目录下的所有文件(不搜索子文件夹) 需要包含的头文件 #include <io.h> #include <string> #include <vector&g ... 
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
		摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ... 
- PHP 获取指定目录下所有文件(包含子目录)
		PHP 获取指定目录下所有文件(包含子目录) //glob — 寻找与模式匹配的文件路径 $filter_dir = array('CVS', 'templates_c', 'log', 'img', ... 
- TDirectory.GetFileSystemEntries获取指定目录下的目录和文件
		使用函数: System.IOUtils.TDirectory.GetFileSystemEntries 所有重载: class function GetFileSystemEntries(const ... 
- TDirectory.GetFiles获取指定目录下的文件
		使用函数: System.IOUtils.TDirectory.GetFiles 所有重载: class function GetFiles(const Path: string): TStringD ... 
随机推荐
- PDF快速创建目录
			很多从网上直接下载的PDF电子书目录都不全,因此搜索资料又加以改化,总结了一个自己手动快速创建目录的办法,分享给大家. 百度搜索PDF电子书的目录或者直接从PDF拷贝到Notepad++等编辑器,使用 ... 
- MYSQL总结之sql语句大全
			一.基础1.说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server --- 创建 ... 
- iOS开发之状态栏隐藏(问题篇)
			一.基本应用 相信基本的隐藏办法网上很多,这里只简单说明一下 1⃣️改变全局状态栏 1.在项目的Info.plist文件里设置UIViewControllerBasedStatusBarAppeara ... 
- 在多线程的情况下是由Iterator遍历修改集合对象,报ConcurrentModificationException()异常的根因分析
			遍历List时抛ConcurrentModificationException异常原理分析 http://www.blogjava.net/houlinyan/archive/2008/04/ ... 
- 【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结
			从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下: 1. 非注解方式 1.1 处理器适配 ... 
- 转MQTT--Python进行发布、订阅测试
			前言 使用python编写程序进行测试MQTT的发布和订阅功能.首先要安装:pip install paho-mqtt 测试发布(pub) 我的MQTT部署在阿里云的服务器上面,所以我在本机上编写 ... 
- 手动建立storybook
			1. Add @storybook/react npm i --save-dev @storybook/react 2. Add react, react-dom, and babel-core np ... 
- 条件数(condition number)
			首先引入维基上的解释 In the field of numerical analysis, the condition number of a function with respect to an ... 
- PL/0编译程序
			Pl/0语言文法的BNF表示: 〈程序〉→〈分程序>. 〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉 <常量说明部 ... 
- thinkPHP5.0的学习研究【基础】
			2017年6月19日13:25:56 基础:1.ThinkPHP5的环境要求如下: PHP >= 5.4.0 PDO PHP Extension MBstring P ... 
