go中的列表和访问目录

时间:2014-07-16 14:28:13

标签: 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)
            }
    }

3 个答案:

答案 0 :(得分:2)

注意:"/"Folders不起作用:"/" + Folders

在您的情况下,这应该更好:

temp,err:=os.Open("/Perkins/" + Folders)

(即使&#39; Folders&#39;不是一个好名字,&#39; subfolder&#39;会更合适)


一种更有效的方式,commented chendeshenganswerin this classpath/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的类型,如果是文件夹

则执行递归函数