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) } }
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.walkdir
filepath.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!