Тип os.FileInfo

Тип os.FileInfo представляет собой интерфейс, который предоставляет информацию о файле или директории. Он возвращается функциями os.Stat, os.Lstat, а также методом File.Stat. Интерфейс содержит методы для получения имени файла, размера, режима доступа, времени последнего изменения и других свойств.

Методы интерфейса

gotype FileInfo interface {
  Name() string     // имя файла
  Size() int64    // размер в байтах
  Mode() FileMode   // права доступа
  ModTime() time.Time // время последнего изменения
  IsDir() bool    // является ли директорией
  Sys() any       // системные данные
}

Пример

Давайте получим информацию о файле с помощью функции os.Stat:

gopackage main

import (
  "fmt"
  "os"
  "time"
)

func main() {
  // Создаем тестовый файл
  os.WriteFile("test.txt", []byte("Hello, World!"), 0644)
  defer os.Remove("test.txt")

  // Получаем информацию о файле
  info, err := os.Stat("test.txt")
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println("Name:", info.Name())
  fmt.Println("Size:", info.Size())
  fmt.Println("IsDir:", info.IsDir())
  fmt.Println("ModTime:", info.ModTime().Format(time.RFC3339))
}

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

go"Name: test.txt"
"Size: 13"
"IsDir: false"
"ModTime: 2024-01-01T12:00:00Z"

Пример

Давайте проверим, является ли путь директорией, с помощью метода IsDir:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Создаем тестовую директорию
  os.Mkdir("testdir", 0755)
  defer os.Remove("testdir")

  info, err := os.Stat("testdir")
  if err != nil {
    fmt.Println(err)
    return
  }

  if info.IsDir() {
    fmt.Println("testdir is a directory")
  } else {
    fmt.Println("testdir is not a directory")
  }
}

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

go"testdir is a directory"

Пример

Давайте получим права доступа к файлу с помощью метода Mode:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Создаем тестовый файл с определенными правами
  os.WriteFile("test.txt", []byte("Hello"), 0644)
  defer os.Remove("test.txt")

  info, err := os.Stat("test.txt")
  if err != nil {
    fmt.Println(err)
    return
  }

  mode := info.Mode()
  fmt.Println("File mode:", mode)
  fmt.Println("Is regular file:", mode.IsRegular())
  fmt.Println("Permissions:", mode.Perm())
}

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

go"File mode: -rw-r--r--"
"Is regular file: true"
"Permissions: -rw-r--r--"

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

  • функцию os.Stat,
    которая возвращает информацию о файле
  • функцию os.Lstat,
    которая возвращает информацию о файле, не следуя по символическим ссылкам
  • функцию os.SameFile,
    которая проверяет, указывают ли два объекта FileInfo на один файл
  • метод os.File.Stat,
    который возвращает информацию об открытом файле