Maison > développement back-end > Golang > golang lit le contenu du fichier journal dans le répertoire

golang lit le contenu du fichier journal dans le répertoire

PHPz
Libérer: 2024-02-05 23:51:07
avant
839 Les gens l'ont consulté

golang lit le contenu du fichier journal dans le répertoire

Contenu de la question

J'essaie de lire tous les fichiers journaux d'un répertoire, le code ci-dessous est capable de lire les noms de fichiers mais pas son contenu.

Sortie console

ds-api-doc-.log false
2023/03/21 11:27:11 open /Users/xxx/ds-api-doc.log: no such file or directory 







 files, err := ioutil.ReadDir("./logs/")
            if err != nil {
                log.Fatal(err)
            }
            fmt.Println(totalTicks)
            for _, file := range files {
                fmt.Println(file.Name(), file.IsDir())
                abs, err := filepath.Abs(file.Name())
        
                file, err := os.Open(abs)
                if err != nil {
                    log.Fatal(err)
                }
                defer file.Close()
        
                scanner := bufio.NewScanner(file)
                for scanner.Scan() {
                    fmt.Println(scanner.Text())
                }
        
                if err := scanner.Err(); err != nil {
                    log.Fatal(err)
                }
        
            }
Copier après la connexion


Réponse correcte


file.name() Renvoie uniquement le nom de base du fichier.

filepath.abs​​()filepath.abs​​() 将加入给定路径,在本例中为文件的基本名称,到当前工作目录。因此,返回的 abs 值将缺少文件路径的 ./logs/ ajoutera le chemin donné, dans ce cas le nom de base du fichier, au répertoire de travail actuel. Par conséquent, la valeur abs renvoyée ne comportera pas le segment ./logs/ du chemin du fichier.

Pour résoudre ce problème, vous pouvez procéder comme suit :

abs, err := filepath.abs(filepath.join("logs", file.name()))
Copier après la connexion

Vous pouvez également utiliser filepath.walkdirfilepath.walkdir,它提供了fn, qui fournit le chemin du fichier pour le paramètre fn.

err := filepath.WalkDir("./logs/", func(path string, de fs.DirEntry, err error) error) {
    if err != nil {
        return err
    } else if de.IsDir() {
        return nil
    }

    file, err := os.Open(path)
    // ...
    return nil
}) 
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal