Интерфейс fs.ReadDirFS

Интерфейс fs.ReadDirFS является частью пакета io/fs и предоставляет метод ReadDir для чтения содержимого директории. Этот интерфейс расширяет базовый интерфейс fs.FS и позволяет получить список записей директории в виде среза fs.DirEntry. Метод ReadDir принимает имя директории и возвращает срез записей и ошибку.

Синтаксис

gotype ReadDirFS interface {
  FS
  ReadDir(name string) ([]DirEntry, error)
}

Пример

Давайте создадим файловую систему, реализующую интерфейс fs.ReadDirFS, и прочитаем содержимое директории с помощью метода ReadDir:

gopackage 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 для чтения содержимого вложенной директории и проверим тип каждой записи:

gopackage 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 для проверки существования директории и обработки ошибок:

gopackage 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("Директория не существует")
  }
}

Результат выполнения кода:

go"Ошибка: open non_existent_dir: file does not exist"
"Директория не существует"

Смотрите также

  • интерфейс fs.FS,
    который является базовым интерфейсом файловой системы
  • интерфейс fs.ReadFileFS,
    который позволяет читать содержимое файлов из файловой системы
  • интерфейс fs.StatFS,
    который предоставляет информацию о файлах и директориях
  • функцию fs.ReadDir,
    которая читает содержимое директории и возвращает срез fs.DirEntry