310 votes

Répertoire de liste en Go

J'ai essayé de trouver comment lister simplement les fichiers et les dossiers d'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é très difficile à trouver. Faites-moi savoir si quelqu'un sait où je dois chercher. Merci.

18voto

Jacob Kopczynski Points 192

D'après votre description, ce que vous voulez probablement est os.Readdirnames .

func (f *File) Readdirnames(n int) (names []string, err error)

Readdirnames lit le contenu du répertoire associé au fichier et retourne une tranche de jusqu'à n noms de fichiers dans le répertoire, dans l'ordre du répertoire. Les appels ultérieurs sur le même fichier donneront d'autres noms.

...

Si n <= 0, Readdirnames retourne tous les noms du répertoire en une seule tranche.

Snippet :

file, err := os.Open(path)
if err != nil {
    return err
}
defer file.Close()
names, err := file.Readdirnames(0)
if err != nil {
    return err
}
fmt.Println(names)

Crédit à SquattingSlavInTracksuit 's commentaire J'aurais suggéré de transformer leur commentaire en réponse si j'avais pu.

5voto

Timo Huovinen Points 8283

Un exemple complet d'impression de tous les fichiers d'un répertoire de manière récursive en utilisant Readdirnames

package main

import (
    "fmt"
    "os"
)

func main() {
    path := "/path/to/your/directory"
    err := readDir(path)
    if err != nil {
        panic(err)
    }
}

func readDir(path string) error {
    file, err := os.Open(path)
    if err != nil {
        return err
    }
    defer file.Close()
    names, _ := file.Readdirnames(0)
    for _, name := range names {
        filePath := fmt.Sprintf("%v/%v", path, name)
        file, err := os.Open(filePath)
        if err != nil {
            return err
        }
        defer file.Close()
        fileInfo, err := file.Stat()
        if err != nil {
            return err
        }
        fmt.Println(filePath)
        if fileInfo.IsDir() {
            readDir(filePath)
        }
    }
    return nil
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X