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
PHPzavant
2024-02-05 23:51:07841parcourir

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)
                }
        
            }

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()))

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
}) 

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer