Метод os.File.Readdir

Метод os.File.Readdir читает содержимое директории и возвращает срез []fs.FileInfo — информацию о каждом файле или поддиректории. В качестве параметра метод принимает целое число n, которое ограничивает количество возвращаемых элементов. Если передать -1, метод вернет все записи из директории. Если n больше нуля, метод попытается прочитать ровно n элементов, но может вернуть меньше, если в директории недостаточно записей. Метод также может вернуть ошибку io.EOF, если директория уже прочитана до конца.

Синтаксис

gofunc (f *File) Readdir(n int) ([]fs.FileInfo, error)

Пример с чтением всех файлов

Давайте откроем директорию и прочитаем все ее содержимое с помощью Readdir с аргументом -1:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  dir, err := os.Open(".")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer dir.Close()

  files, err := dir.Readdir(-1)
  if err != nil {
    fmt.Println(err)
    return
  }

  for _, file := range files {
    fmt.Println(file.Name())
  }
}

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

go"file1.txt"
"file2.go"
"subdir"

Пример с чтением ограниченного количества

Давайте прочитаем только первые 2 элемента из директории. Если в директории меньше элементов, метод вернет то, что есть:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  dir, err := os.Open(".")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer dir.Close()

  files, err := dir.Readdir(2)
  if err != nil {
    fmt.Println(err)
    return
  }

  for _, file := range files {
    fmt.Println(file.Name())
  }
}

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

go"file1.txt"
"file2.go"

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

  • функцию os.ReadDir,
    которая является более удобной альтернативой для чтения директории
  • метод os.File.Readdirnames,
    который возвращает только имена файлов
  • функцию os.Open,
    которая открывает файл или директорию для чтения
  • интерфейс os.FileInfo,
    который предоставляет информацию о файле