怎么使用Golang递归获取目录下所有文件


这篇文章主要讲解了“怎么使用Golang递归获取目录下所有文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Golang递归获取目录下所有文件”吧!如果我想获取一个目录下的所有文件列表,使用 Golang 该如何实现呢?比如有个目录 dir 结构如下:tree dir
dir
├── bar.txt
├── foo.txt
└── subdir
└── baz.txt那么如何获取 dir 目录下的所有文件路径呢?dir/foo.txt
dir/bar.txt
dir/subdir/baz.txt标准库 io/ioutil 包提供了一个函数 ReadDir() 可以获取指定目录下的所有内容,按文件名排序,返回 []fs.FileInfo 切片来描述目录中的所有内容。利用 ioutil.ReadDir() 我们可以获取目录中的所有文件吗?我们来测试一下:运行输出:names:[bar.txt foo.txt subdir]可见 ioutil.ReadDir() 并不会递归获取子目录的内容。如果想递归获子目录的内容,该如何实现呢?我们可以递归的调用我们自己的函数,来递归遍历子目录。我们来测试一下:运行输出:dir/bar.txt
dir/foo.txt
dir/subdir/baz.txt哇,看起来大功告成。但果真如此吗?如果我们此时在目录 dir 中加入一个符号链接,指向另外一个目录,那结果会如何呢?tree dir
dir
├── bar.txt
├── foo.txt
├── subdir
│ └── baz.txt
└── zipln -> ../ziptree zip
zip
└── qux.txt还是运行调用 GetDirAllFilePaths(),我们得到的结果如下:dir/bar.txt
dir/foo.txt
dir/subdir/baz.txt
dir/zipln可见,当子目录为符号链接时,我们并没有访问链接指向的目标文件。我们改变一下实现,当子目录是符号链接时,读取目标目录下的文件。我们来测试一下:运行输出:dir/bar.txt
dir/foo.txt
dir/subdir/baz.txt
dir/zipln/qux.txtperfect,这就是我们想要的效果。有时,我们还需要目录路径,即获取指定目录下的文件和子目录的路径。比如在对一个目录进行压缩时会需要。还是以上文 dir 目录为例,我们想要的结果是:dir
dir/bar.txt
dir/foo.txt
dir/subdir
dir/subdir/baz.txt
dir/zipln
dir/zipln/qux.txt我们只要稍微改造 GetDirAllFilePaths 和 GetDirAllFilePathsFollowSymlink 即可,在遍历时把当前的目录加入结果集。并更名 GetDirAllFilePaths 为 GetDirAllEntryPaths,GetDirAllFilePathsFollowSymlink 为 GetDirAllEntryPathsFollowSymlink,因为条目(Entry)比文件(File)语义更符合函数的功能,因为不仅可以获取文件,也可以获取目录的路径。我们测试一下。运行输出:not免费云主机域名 follow symlink:
dir
dir/bar.txt
dir/foo.txt
dir/subdir
dir/subdir/baz.txt
dir/ziplnfollow symlink:
dir
dir/bar.txt
dir/foo.txt
dir/subdir
dir/subdir/baz.txt
dir/zipln
dir/zipln/qux.txt以上函数已放置开源库 go-huge-util,可 import 直接使用。感谢各位的阅读,以上就是“怎么使用Golang递归获取目录下所有文件”的内容了,经过本文的学习后,相信大家对怎么使用Golang递归获取目录下所有文件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: MyBatisPlus逻辑删除和字段自动填充怎么实现

这篇文章主要介绍“MyBatisPlus逻辑删除和字段自动填充怎么实现”,在日常操作中,相信很多人在MyBatisPlus逻辑删除和字段自动填充怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatisPlus逻辑删除…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/15 12:35
Next 05/15 12:35

相关推荐