Метод os.File.Stat

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

Синтаксис

gofunc (f *os.File) Stat() (os.FileInfo, error)

Пример

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

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("example.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  info, err := file.Stat()
  if err != nil {
    fmt.Println("Error getting file info:", err)
    return
  }

  fmt.Println("File name:", info.Name())
  fmt.Println("File size:", info.Size())
  fmt.Println("File mode:", info.Mode())
  fmt.Println("Is directory:", info.IsDir())
  fmt.Println("Mod time:", info.ModTime())
}

Результат выполнения кода (значения могут отличаться):

go"File name: example.txt"
"File size: 1024"
"File mode: -rw-r--r--"
"Is directory: false"
"Mod time: 2026-09-04 12:34:56 +0000 UTC"

Пример

Метод Stat также может использоваться для проверки существования файла. Если файл не существует, будет возвращена ошибка с типом *fs.PathError:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Open("nonexistent.txt")
  if err != nil {
    fmt.Println("Error opening file:", err)
    return
  }
  defer file.Close()

  info, err := file.Stat()
  if err != nil {
    fmt.Println("Error getting file info:", err)
    return
  }

  fmt.Println("File info:", info)
}

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

go"Error opening file: open nonexistent.txt: no such file or directory"

Пример

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

gopackage main

import (
  "fmt"
  "os"
)

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

  info, err := file.Stat()
  if err != nil {
    fmt.Println("Error getting directory info:", err)
    return
  }

  if info.IsDir() {
    fmt.Println("This is a directory")
  } else {
    fmt.Println("This is a regular file")
  }

  fmt.Printf("Permissions: %v\n", info.Mode().Perm())
}

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

go"This is a directory"
"Permissions: drwxr-xr-x"

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

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