Функция os.ReadDir

Функция os.ReadDir читает содержимое директории и возвращает срез []fs.DirEntry, отсортированный по именам файлов. В первый параметр мы передаем путь к директории в виде строки, во второй параметр мы передаем целое число, указывающее максимальное количество записей для чтения (передача -1 означает чтение всех записей). Функция возвращает срез записей директории и ошибку, которая будет nil при успешном выполнении.

Синтаксис

goos.ReadDir(dirname string, n int) ([]fs.DirEntry, error)

Пример

Давайте прочитаем все содержимое текущей директории:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  entries, err := os.ReadDir(".", -1)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  for _, entry := range entries {
    fmt.Println(entry.Name())
  }
}

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

go"file1.txt"
"file2.go"
"folder"
"main.go"

Пример

Давайте прочитаем только первые две записи из директории:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  entries, err := os.ReadDir(".", 2)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  for _, entry := range entries {
    fmt.Println(entry.Name())
  }
}

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

go"file1.txt"
"file2.go"

Пример

Давайте проверим, является ли запись директорией, и получим информацию о файле:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  entries, err := os.ReadDir(".", -1)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  for _, entry := range entries {
    if entry.IsDir() {
      fmt.Printf("%s is a directory\n", entry.Name())
    } else {
      info, err := entry.Info()
      if err != nil {
        fmt.Println("Error getting info:", err)
        continue
      }
      fmt.Printf("%s size: %d bytes\n", entry.Name(), info.Size())
    }
  }
}

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

go"file1.txt size: 1024 bytes"
"file2.go size: 2048 bytes"
"folder is a directory"
"main.go size: 512 bytes"

Пример

Давайте обработаем ошибку при попытке прочитать несуществующую директорию:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  entries, err := os.ReadDir("/nonexistent", -1)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  for _, entry := range entries {
    fmt.Println(entry.Name())
  }
}

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

go"Error: open /nonexistent: no such file or directory"

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

  • функцию os.ReadFile,
    которая читает содержимое файла в байтовый срез
  • функцию os.Mkdir,
    которая создает новую директорию
  • функцию os.Stat,
    которая возвращает информацию о файле или директории
  • функцию filepath.WalkDir,
    которая обходит дерево директорий рекурсивно