Répertoire de liste dans Go

J'ai essayé de comprendre comment lister simplement les fichiers et les dossiers dans un seul répertoire dans Go.

J'ai trouvé filepath.Walk, mais il va automatiquement dans les sous-répertoires, ce que je ne veux pas. Toutes mes autres recherches n'ont rien donné de mieux.

Je suis sûr que cette fonctionnalité existe, mais elle a été vraiment difficile à trouver. Laissez-moi savoir si quelqu'un sait où je devrais regarder. Grâce.

100
go
demandé sur Behram Mistree 2013-02-03 06:17:54

4 réponses

Vous pouvez essayer d'utiliser la fonction ReadDir dans le paquet io/ioutil. Selon les docs:

ReadDir lit le répertoire nommé par dirname et renvoie une liste d'entrées de répertoire triées.

La tranche obtenue contient os.FileInfo types, qui fournissent les méthodes énumérées ici. Voici un exemple de base qui répertorie le nom de tout dans le répertoire courant (les dossiers sont inclus mais pas spécialement marqués - vous pouvez vérifier si un élément est un dossier en utilisant le IsDir() méthode):

package main

import (
    "fmt"
    "io/ioutil"
     "log"
)

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

    for _, f := range files {
            fmt.Println(f.Name())
    }
}
216
répondu RocketDonkey 2017-09-01 02:38:01

Encore plus simple, utilisez path/filepath:

package main    

import (
    "fmt"
    "log"
    "path/filepath"
)

func main() {
    files, err := filepath.Glob("*")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(files) // contains a list of all files in the current directory
}
49
répondu Fatih Arslan 2017-10-07 13:32:39

Nous pouvons obtenir une liste de fichiers dans un dossier sur le système de fichiers en utilisant diverses fonctions de bibliothèque standard golang.

  1. chemin d'accès du fichier.Marche
  2. ioutil.ReadDir
  3. os.Fichier.Readdir

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "os"
    "path/filepath"
)

func main() {
    var (
        root  string
        files []string
        err   error
    )

    root := "/home/manigandan/golang/samples"
    // filepath.Walk
    files, err = FilePathWalkDir(root)
    if err != nil {
        panic(err)
    }
    // ioutil.ReadDir
    files, err = IOReadDir(root)
    if err != nil {
        panic(err)
    }
    //os.File.Readdir
    files, err = OSReadDir(root)
    if err != nil {
        panic(err)
    }

    for _, file := range files {
        fmt.Println(file)
    }
}
  1. utilisation de filepath.Marche

Le paquet path/filepath fournit un moyen pratique d'analyser tous les fichiers dans un répertoire, il analysera automatiquement chaque sous-répertoire dans le répertoire.

func FilePathWalkDir(root string) ([]string, error) {
    var files []string
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if !info.IsDir() {
            files = append(files, path)
        }
        return nil
    })
    return files, err
}
  1. en utilisant ioutil.ReadDir

ioutil.ReadDir lit le répertoire nommé par dirname et renvoie un liste des entrées de répertoire triées par nom de fichier.

func IOReadDir(root string) ([]string, error) {
    var files []string
    fileInfo, err := ioutil.ReadDir(root)
    if err != nil {
        return files, err
    }

    for _, file := range fileInfo {
        files = append(files, file.Name())
    }
    return files, nil
}
  1. Utilisation du système d'exploitation.Fichier.Readdir

Readdir lit le contenu du répertoire associé à file et renvoie une tranche allant jusqu'à n valeurs FileInfo, comme cela serait renvoyé par Lstat, dans l'ordre du répertoire. Appels ultérieurs sur le même fichier rendement plus FileInfos.

func OSReadDir(root string) ([]string, error) {
    var files []string
    f, err := os.Open(root)
    if err != nil {
        return files, err
    }
    fileInfo, err := f.Readdir(-1)
    f.Close()
    if err != nil {
        return files, err
    }

    for _, file := range fileInfo {
        files = append(files, file.Name())
    }
    return files, nil
}

Résultats de référence.

score de référence

Obtenez plus de détails sur ce blog Post

21
répondu manigandand 2018-03-09 15:18:07

ioutil.ReadDir est une bonne trouvaille, mais si vous cliquez et regardez le code source, vous voyez qu'il appelle la méthode Readdir de l'os.Fichier . Si vous êtes d'accord avec l'ordre du répertoire et n'avez pas besoin de la liste triée, alors cette méthode Readdir est tout ce dont vous avez besoin.

19
répondu Sonia 2016-08-03 13:46:56