Go 我试图以广度优先的方式遍历文件结构。我越来越紧张了
我知道关于Go 我试图以广度优先的方式遍历文件结构。我越来越紧张了,go,recursion,Go,Recursion,我知道关于ioutil.ReadDir和os.filePath的信息,但它们都没有以广度优先的方式遍历目录。 我的方法是调用ioutil.ReadDir并将根目录的所有内容附加到一个切片中。然后我迭代内容,检查它是否为IsDir[],如果为true,则递归调用函数 package main import ( "io/ioutil" "os" ) var files []string var path string func appendFiles(root string)
ioutil.ReadDir
和os.filePath
的信息,但它们都没有以广度优先的方式遍历目录。
我的方法是调用ioutil.ReadDir
并将根目录的所有内容附加到一个切片中。然后我迭代内容,检查它是否为IsDir[]
,如果为true,则递归调用函数
package main
import (
"io/ioutil"
"os"
)
var files []string
var path string
func appendFiles(root string) {
fileInfo, err := ioutil.ReadDir(root)
if err != nil {
return
}
for _, file := range fileInfo {
files = append(files, file.Name())
}
for _, file := range fileInfo {
fileStat, _ := os.Stat(file.Name())
if fileStat.Mode().IsDir() {
// path = path + "/" + file.Name()
appendFiles(file.Name())
}
}
}
func main() {
appendFiles(".")
}
问题是可能会返回您忽略的错误。当这种情况发生时,fileStat
可能是nil
,因此在下一行中调用fileStat.Mode()
而os.Stat()
失败的原因是file.Name()
是相对于root
,file.Name()
本身几乎不可能存在,它必须与root
连接。如果使用不存在的文件名调用os.Stat()
,它将返回nil
文件信息和非nil
错误
您可以使用为os.Stat()
将使用的文件构造有效路径。最好是处理错误,例如返回错误,您可以在main()
中检查这些错误
请引用运行程序时获得的实际输出,另请参阅。关于您的代码,请确保它是一个。作为一个新用户,也可以使用。感谢您指出这一点。我会记住这一点。
func appendFiles(root string) error {
fileInfo, err := ioutil.ReadDir(root)
if err != nil {
return fmt.Errorf("ReadDir error: %w", err)
}
for _, file := range fileInfo {
files = append(files, filepath.Join(root, file.Name()))
}
for _, file := range fileInfo {
fullName := filepath.Join(root, file.Name())
fileStat, err := os.Stat(fullName)
if err != nil {
return fmt.Errorf("Stat error: %w", err)
}
if fileStat.Mode().IsDir() {
if err := appendFiles(fullName); err != nil {
return fmt.Errorf("appendFiles error: %w", err)
}
}
}
return nil
}
func main() {
if err := appendFiles("."); err != nil {
fmt.Println(err)
}
}