Метод os.File.Stat
Метод os.File.Stat возвращает информацию о файле, связанном с открытым дескриптором.
Он возвращает интерфейс fs.FileInfo, содержащий данные о размере файла, правах доступа,
времени модификации и другие системные атрибуты. Метод вызывается на объекте *os.File,
который должен быть открыт для чтения или записи.
Синтаксис
func (f *os.File) Stat() (os.FileInfo, error)
Пример
Давайте откроем файл и получим его информацию с помощью метода Stat:
package 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())
}
Результат выполнения кода (значения могут отличаться):
"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:
package 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)
}
Результат выполнения кода:
"Error opening file: open nonexistent.txt: no such file or directory"
Пример
Получим информацию о файле и проверим, является ли он директорией:
package 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())
}
Результат выполнения кода:
"This is a directory"
"Permissions: drwxr-xr-x"
Смотрите также
-
функцию
os.Stat,
которая аналогична методуStat, но принимает путь к файлу -
функцию
os.Lstat,
которая возвращает информацию о файле или символической ссылке -
метод
os.File.Readdir,
который читает содержимое директории -
функцию
os.SameFile,
которая проверяет, ссылаются ли два описания на один файл