创建 递归遍历和删除临时目录
引言
下面通过一个例子,说明如何实现创建、递归遍历和删除临时目录。用到标准库的包主要有:"os","path/filepath","io/ioutil","fmt"。
流程图
创建临时目录
ioutil.TempDir()用来创建临时目录,该方法接收两个参数。第一个参数表示需要在哪里创建新目录。若是空值,则会自动调用os.TempDir()方法获取系统的默认临时目录;第二个参数是匹配的模式,比如是“*_nginx.log”,生成目录时会用随机字符串将“*”替换掉。fmt.Errorf()会格式化输出错误信息,返回error。但error是接口类型,可用error.Error()方法将错误信息转换为字符串表示。filepath.Join()用来拼接路径。os.MkdirAll()会递归创建目录,权限位适用于新创建的所有目录。类似linux命令“mkdir -p /foo/bar”。
遍历和删除临时目录
os.Chdir()用来更改当前的工作目录,当前工作目录一般默认为环境变量“GOPATH”的值,如果使用gomod包管理,则默认为环境变量“GOMOD”的值。在命令行窗口下,可用“go env”命令查看。自定义的subDirToSkip变量的作用是用来指定要跳过的目录,该操作不会报错,如果遍历时的目录名与它相等,必须返回一个固定的值“filepath.SkipDir”,专门用来返回的值,不是错误。filepath.Walk()用来递归遍历目录和文件,接收两个参数。第一个是设置要遍历的根路径。第二个是回调函数WalkFunc,它的用法:type WalkFunc func(path string, info os.FileInfo, err error) errorpath:表示遍历的目录前缀,假设目录foo中有两个文件a.txt和b.txt,将foo设为前缀,在遍历时就会分别用foo/a.txt和foo/b.txt作为参数调用walk函数。info:表示文件的详细信息,比如文件名、文件大小等等。它是接口类型。type FileInfo interface {Name() string // 文件名Size() int64 // 文件大小,单位是字节。Mode() FileMode // 文件模式位ModTime() time.Time // 修改时间IsDir() bool // 是否是目录Sys() interface{} // 基础数据源}error:表示错误信息,出现错误时会停止遍历。
运行
在windows下的运行结果:
原创不易,记得关注一下。