我需要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)
}
}
答案 0 :(得分:2)
注意:"/"Folders
不起作用:"/" + Folders
在您的情况下,这应该更好:
temp,err:=os.Open("/Perkins/" + Folders)
(即使&#39; Folders
&#39;不是一个好名字,&#39; subfolder
&#39;会更合适)
一种更有效的方式,commented chendesheng(answer)in this class,path/filepath/#Walk
}使用this example:
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
})
}
这将列出所有文件,但您可以将其与将过滤这些文件的函数相关联:请参阅{{3}}:
matched, err := filepath.Match("*.mp3", fi.Name())
然后,您可以忽略您不想要的文件,只针对与您的模式匹配的文件进行操作。
答案 1 :(得分:2)
我认为您可以使用filepath.Walk
遍历以root为根的文件树,为每个文件调用walkFn 或树中的目录,包括root。出现的所有错误 访问文件和目录由walkFn过滤。文件是 按词汇顺序走,这使输出确定性但是 意味着对于非常大的目录,Walk可能效率低下。步行 不遵循符号链接。
答案 2 :(得分:0)
也许你需要这个? http://golang.org/pkg/io/ioutil/#ReadDir 然后检查是来自http://golang.org/pkg/os/#FileInfo的类型,如果是文件夹
则执行递归函数