繁体   English   中英

列出并访问go中的目录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM