cpp

Получение информации о файле и каталоге

Получить размер файла и время изменения файла, а также значения других метаданных позволяют следующие функции из пакета os:

  • Stat() — через первое возвращаемое значение доступен объект fs.FileInfo с информацией об элементе. Через второе значение можно получить информацию об ошибке. Если операция выполнена успешно, то значением будет nil. Формат функции:
os.Stat(name string) (fs.FileInfo, error)

В качестве параметра функция принимает абсолютный или относительный путь к файлу или каталогу. Пример:

info, err := os.Stat(`C:\book\file.txt`)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(info)
// &{file.txt 32 {2094559252 30951910} {2094559252 30951910}
// {2094559252 30951910} 0 27 0 0 {0 0} C:\book\file.txt
// 0 0 0 false}

Вместо функции Stat() можно воспользоваться методом Stat() структуры File. Формат метода:

(*os.File).Stat() (fs.FileInfo, error)

Пример:

func test() {
   file, err := os.Open(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   info, err := file.Stat()
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(info)
   // &{file.txt 32 {2094559252 30951910} {2094559252 30951910}
   // {2094559252 30951910} 0 27 0 1 {0 0}  1922327055 8847360
   // 1276893 false}
}
  • Lstat() — через первое возвращаемое значение доступен объект fs.FileInfo с информацией об элементе. Если файл является символической ссылкой, то объект описывает символическую ссылку. Через второе значение можно получить информацию об ошибке. Если операция выполнена успешно, то значением будет nil. Формат функции:
os.Lstat(name string) (fs.FileInfo, error)

В качестве параметра функция принимает абсолютный или относительный путь к файлу или каталогу. Пример:

info, err := os.Lstat(`C:\book\file.txt`)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(info)
// &{file.txt 32 {2094559252 30951910} {2094559252 30951910}
// {2094559252 30951910} 0 27 0 0 {0 0} C:\book\file.txt
// 0 0 0 false}

Интерфейс fs.FileInfo содержит следующие методы:

  • Size() — возвращает размер файла в байтах. Формат метода:
(fs.FileInfo).Size() int64

Пример:

fmt.Println(info.Size()) // 27
  • Name() — возвращает название файла. Формат метода:
(fs.FileInfo).Name() string

Пример:

fmt.Println(info.Name()) // file.txt
  • IsDir() — возвращает true, если объект является каталогом, и false — в противном случае. Формат метода:
(fs.FileInfo).IsDir() bool

Пример:

fmt.Println(info.IsDir()) // false
  • Mode() — возвращает маску прав доступа. Формат метода:
(fs.FileInfo).Mode() fs.FileMode

Пример:

fmt.Println(info.Mode().Perm()) // -rw-rw-rw-
  • ModTime() — возвращает дату и время изменения файла. Формат метода:
(fs.FileInfo).ModTime() time.Time

Пример:

fmt.Println(info.ModTime())
// 2022-04-06 21:45:29.3294612 +0300 MSK

Пример использования функции Stat() приведен в листинге 15.1.

Листинг 15.1. Пример использования функции Stat()

package main

import (
   "fmt"
   "os"
)

func main() {
   info, err := os.Stat(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(info.Size())        // 27
   fmt.Println(info.Name())        // file.txt
   fmt.Println(info.IsDir())       // false
   fmt.Println(info.Mode().Perm()) // -rw-rw-rw-
   fmt.Println(info.ModTime())
   // 2022-04-06 21:45:29.3294612 +0300 MSK
}

Изменить дату открытия и модификации файла позволяет функция Chtimes() из пакета os. Формат функции:

os.Chtimes(name string, atime time.Time, mtime time.Time) error

Пример:

// Дата и время открытия файла
atime := time.Date(2022, 3, 21, 22, 49, 47, 0, time.Local)
// Дата и время изменения файла
mtime := time.Date(2022, 4, 11, 22, 20, 47, 0, time.Local)
err := os.Chtimes(`C:\book\file.txt`, atime, mtime)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println("Операция выполнена успешно")

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp