从FileInfo打开文件

时间:2015-05-04 21:55:22

标签: go

在Golang中,如果我有一个os.FileInfo,有没有办法在没有原始路径的情况下自己打开*os.File

假设我有这样的事情:

package main

import (
    "os"
    "path/filepath"
    "strings"
)

var files []os.FileInfo

func walker(path string, info os.FileInfo, err error) error {
    if strings.HasSuffix(info.Name(), ".txt") {
        files = append(files, info)
    }
    return nil
}

func main() {
    err := filepath.Walk("/tmp/foo", walker)
    if err != nil {
        println("Error", err)
    } else {
        for _, f := range files {
            println(f.Name())
            // This is where we'd like to open the file
        }
    }
}

有没有办法将FileInfo转换为* File?我实际使用的代码不是基于filepath.Walk;但我确实得到了[]os.FileInfo片。我仍然有根目录和文件名,但似乎任何进一步的子树信息都已经过了这个阶段。

3 个答案:

答案 0 :(得分:13)

没有。 FileInfo接口根本不公开路径,osioutil包中提供的所有方法都接受路径名作为字符串。

答案 1 :(得分:3)

不,仅使用FileInfo无法打开文件。 os.Open只接受一个字符串。您应始终拥有路径或父路径,因为这是获取FileInfo的唯一方法。

答案 2 :(得分:0)

作为附加信息,这是如何构造包含路径的文件名字符串:

filename := filepath.Join(path, info.Name())