Интерфейс fs.ReadDirFS
Интерфейс fs.ReadDirFS является частью пакета io/fs
и предоставляет метод ReadDir для чтения содержимого
директории. Этот интерфейс расширяет базовый интерфейс
fs.FS и позволяет получить список записей директории
в виде среза fs.DirEntry. Метод ReadDir принимает
имя директории и возвращает срез записей и ошибку.
Синтаксис
type ReadDirFS interface {
FS
ReadDir(name string) ([]DirEntry, error)
}
Пример
Давайте создадим файловую систему, реализующую интерфейс
fs.ReadDirFS, и прочитаем содержимое директории
с помощью метода ReadDir:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
// Получаем файловую систему операционной системы
fsys := os.DirFS(".")
// Читаем содержимое текущей директории
entries, err := fsys.(fs.ReadDirFS).ReadDir(".")
if err != nil {
fmt.Println("Ошибка чтения директории:", err)
return
}
// Выводим имена всех записей в директории
for _, entry := range entries {
fmt.Println(entry.Name())
}
}
Пример
Давайте используем метод ReadDir для чтения содержимого
вложенной директории и проверим тип каждой записи:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
// Создаем файловую систему для тестирования
fsys := os.DirFS(".")
dir := "."
// Читаем содержимое директории
entries, err := fsys.(fs.ReadDirFS).ReadDir(dir)
if err != nil {
fmt.Println("Ошибка чтения директории:", err)
return
}
// Выводим информацию о каждой записи
for _, entry := range entries {
if entry.IsDir() {
fmt.Println(entry.Name(), " - директория")
} else {
info, _ := entry.Info()
fmt.Println(entry.Name(), " - файл, размер:", info.Size())
}
}
}
Пример
Давайте используем метод ReadDir для проверки существования
директории и обработки ошибок:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
fsys := os.DirFS(".")
// Пробуем прочитать несуществующую директорию
_, err := fsys.(fs.ReadDirFS).ReadDir("non_existent_dir")
if err != nil {
fmt.Println("Ошибка:", err)
}
// Проверяем тип ошибки
if os.IsNotExist(err) {
fmt.Println("Директория не существует")
}
}
Результат выполнения кода:
"Ошибка: open non_existent_dir: file does not exist"
"Директория не существует"
Смотрите также
-
интерфейс
fs.FS,
который является базовым интерфейсом файловой системы -
интерфейс
fs.ReadFileFS,
который позволяет читать содержимое файлов из файловой системы -
интерфейс
fs.StatFS,
который предоставляет информацию о файлах и директориях -
функцию
fs.ReadDir,
которая читает содержимое директории и возвращает срезfs.DirEntry