Функция fs.ReadDir
Функция fs.ReadDir читает содержимое директории и возвращает срез []fs.DirEntry. В первый параметр передается интерфейс fs.FS, который представляет файловую систему, во второй параметр - путь к директории, содержимое которой нужно прочитать. Функция возвращает записи директории и ошибку, если она произошла.
Синтаксис
entries, err := fs.ReadDir(fsys, dir)
Пример
Давайте прочитаем содержимое текущей директории:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
entries, err := fs.ReadDir(os.DirFS("."), ".")
if err != nil {
fmt.Println(err)
return
}
for _, entry := range entries {
fmt.Println(entry.Name())
}
}
Результат выполнения кода:
"file1.txt"
"file2.txt"
"dir1"
"dir2"
Пример
Давайте прочитаем содержимое вложенной директории "data":
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
entries, err := fs.ReadDir(os.DirFS("."), "data")
if err != nil {
fmt.Println(err)
return
}
for _, entry := range entries {
if entry.IsDir() {
fmt.Printf("Directory: %s\n", entry.Name())
} else {
fmt.Printf("File: %s\n", entry.Name())
}
}
}
Результат выполнения кода:
"Directory: logs"
"File: config.json"
"File: settings.ini"
Пример
Давайте получим информацию о размере каждого файла в директории:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
entries, err := fs.ReadDir(os.DirFS("."), ".")
if err != nil {
fmt.Println(err)
return
}
for _, entry := range entries {
info, err := entry.Info()
if err != nil {
fmt.Printf("Error getting info for %s: %v\n", entry.Name(), err)
continue
}
if !entry.IsDir() {
fmt.Printf("%s: %d bytes\n", entry.Name(), info.Size())
}
}
}
Результат выполнения кода:
"file1.txt: 1024 bytes"
"file2.txt: 2048 bytes"
Смотрите также
-
функцию
os.ReadDir,
которая читает содержимое директории через операционную систему -
функцию
filepath.WalkDir,
которая обходит дерево директорий рекурсивно -
функцию
fs.Stat,
которая получает информацию о файле или директории -
интерфейс
fs.DirEntry,
который представляет запись директории в файловой системе