[英]List and access directory in go
我需要在golan中提供一些帮助来编写一个程序,该程序可以在给定目录及其子目录中进行搜索,以在每个目录中查找特定的单词。
这是我到目前为止列出目录并将其保存为数组的内容。 现在我要检查每个人是否有孩子,如果是,我应该打开它直到到达树的最后一层。
package main
import (
"fmt"
"os"
)
func main() {
d, err := os.Open("/Perkins")
// fmt.Println(d.Readdirnames(-1))
y, err:=d.Readdirnames(-1) //
fmt.Println(y)
for i:=0; i<len(y); i++{
if y[i]!=" "{
Folders:=y[i]
temp,err:=os.Open("/"Folders) //how do i out the array element as a path?
fmt.Println (temp)
fmt.Println(err)
}
}
注意: "/"Folders
不起作用: "/" + Folders
您的情况应该更好:
temp,err:=os.Open("/Perkins/" + Folders)
(尽管“ Folders
”不是一个好名字,但“ subfolder
”会更合适)
chendesheng 评论 (请参阅答案 ),一种更有效的方法是(如在此类中 )使用path/filepath/#Walk
:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
filepath.Walk("/Perkins", func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
}
这将列出所有文件,但是您可以将其与过滤这些文件的功能相关联:请参见以下示例 :
matched, err := filepath.Match("*.mp3", fi.Name())
然后,您可以忽略不需要的文件,而仅对与您的模式匹配的文件进行处理。
我认为您可以使用filepath.Walk
Walk遍历以root为根的文件树,为树中的每个文件或目录(包括root)调用walkFn。 walkFn会过滤访问文件和目录时出现的所有错误。 这些文件以词法顺序进行遍历,这使输出具有确定性,但是这意味着对于非常大的目录,遍历可能效率不高。 步行不遵循符号链接。
也许您需要这个? http://golang.org/pkg/io/ioutil/#ReadDir然后检查是否是http://golang.org/pkg/os/#FileInfo的类型,如果文件夹中有递归函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.