如何在 GoLang 中将项目附加到 []os.FileInfo
how to append items to []os.FileInfo in GoLang
我正在制作一个类似于 ioutil.ReadDir() 的函数,但由于我想要文件夹和子文件夹中的所有文件而递归,而 ioutil.ReadDir() 只是在指定的文件夹中执行它,但我不这样做不知道如何将项目附加到我创建的 []os.FileInfo 数组中。
这是我的:
func GetFilesRecursively(searchDirectory string) (foundFileList []os.FileInfo, errorGenerated error){
fileList := []os.FileInfo{}
allFilesAndFolders := []string{}
//Get all the files and directories
err := filepath.Walk(searchDirectory, func(path string, f os.FileInfo, err error) error {
allFilesAndFolders = append(allFilesAndFolders, path)
return nil
})
// Remove directories due those are also added into the array and we don't need them
for _, file := range allFilesAndFolders{
fileInfo, _ := os.Stat(file)
if (!fileInfo.Mode().IsDir()){
fileList = append(fileList, file) //error here!!
}
}
return fileList, err
}
错误在上面代码段的注释中
我该怎么做?
您尝试将字符串追加到 os.FileInfo 的数组中。那是类型错误。
这是你的代码版本,它可以做你想做的事情,看起来更像 Go,变量名更短,未命名 return 类型(它们的类型完美地描述了它们的作用)并使用 var
创建一个空切片。
func GetFilesRecursively(root string) ([]os.FileInfo, error) {
var files []os.FileInfo
// walk all directories but only collect files
err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
if !f.IsDir() {
files = append(files, f)
}
return nil
})
return files, err
}
我正在制作一个类似于 ioutil.ReadDir() 的函数,但由于我想要文件夹和子文件夹中的所有文件而递归,而 ioutil.ReadDir() 只是在指定的文件夹中执行它,但我不这样做不知道如何将项目附加到我创建的 []os.FileInfo 数组中。
这是我的:
func GetFilesRecursively(searchDirectory string) (foundFileList []os.FileInfo, errorGenerated error){
fileList := []os.FileInfo{}
allFilesAndFolders := []string{}
//Get all the files and directories
err := filepath.Walk(searchDirectory, func(path string, f os.FileInfo, err error) error {
allFilesAndFolders = append(allFilesAndFolders, path)
return nil
})
// Remove directories due those are also added into the array and we don't need them
for _, file := range allFilesAndFolders{
fileInfo, _ := os.Stat(file)
if (!fileInfo.Mode().IsDir()){
fileList = append(fileList, file) //error here!!
}
}
return fileList, err
}
错误在上面代码段的注释中
我该怎么做?
您尝试将字符串追加到 os.FileInfo 的数组中。那是类型错误。
这是你的代码版本,它可以做你想做的事情,看起来更像 Go,变量名更短,未命名 return 类型(它们的类型完美地描述了它们的作用)并使用 var
创建一个空切片。
func GetFilesRecursively(root string) ([]os.FileInfo, error) {
var files []os.FileInfo
// walk all directories but only collect files
err := filepath.Walk(root, func(path string, f os.FileInfo, err error) error {
if !f.IsDir() {
files = append(files, f)
}
return nil
})
return files, err
}