当通过另一个文件导入时,仅使用ioutils ReadDir扫描当前目录中的文件

时间:2018-06-03 19:05:22

标签: go

我遇到了ioutils.ReadDir的问题,出于某种原因,它扫描了项目根目录中的所有文件,而不是仅扫描当前目录。

./ main.go

import (
    "myfolder/myfile"
)

func main() {
    myfile.MyFunction()
}

./ MyFolder文件/ myfile.go

package myfile

func MyFunction() {
    files, err := ioutil.ReadDir(".")
    if err != nil {
        log.Fatal(err)
    }

    for _, f := range files {
        fi, err := os.Stat(f.Name())
        if err != nil {
            log.Fatal(err)
            return
        }

        switch mode := fi.Mode(); {
        case mode.IsDir():
            fmt.Printf("%#s  is a folder\n", f.Name())
        case mode.IsRegular():
            fmt.Printf("%#s is a file\n", f.Name())
        }
    }
}

我不确定为什么会这样,我是Go的新手。我的猜测是因为它是通过main.go导入的。如何才能在./myfolder中搜索文件夹和文件?

1 个答案:

答案 0 :(得分:0)

当前目录不是源文件的目录,而是执行程序的当前目录。

如果您正在从shell(bash或Windows命令行)执行程序,程序将继承shell中的当前目录。

在执行程序之前,您必须使用git add更改当前目录,或者在Go源文件中调用cd myfolder。 (os.Chdir("myfolder")不会影响shell的当前目录)

如果要以递归方式列出目录,则必须执行该操作。请参阅filepath.Walk