代码之家  ›  专栏  ›  技术社区  ›  Javier Salas

如何在golang中将项追加到[]os.fileinfo

  •  -1
  • Javier Salas  · 技术社区  · 8 年前

    我正在创建一个类似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
    }
    

    错误在上面代码段的注释中

    我怎么能那样做?

    1 回复  |  直到 8 年前
        1
  •  1
  •   gonutz    8 年前

    尝试将字符串附加到os.fileinfo数组。这是一个类型错误。

    下面是您的代码的一个版本,它实现了您想要的功能,看起来更像,具有较短的变量名、未命名的返回类型(它们的类型完全描述了它们的功能)和使用 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
    }