Тип os.DirEntry
Тип os.DirEntry представляет запись о файле или директории в файловой системе. Он описывает отдельный элемент внутри директории, например, файл, папку или символьную ссылку. Объекты, реализующие этот интерфейс, возвращаются функциями os.ReadDir и os.File.ReadDir, и позволяют получить информацию о записи без необходимости выполнять отдельный вызов os.Stat для каждого элемента, что делает их эффективными для массового чтения содержимого папок.
Интерфейс os.DirEntry содержит несколько важных методов: Name возвращает имя записи, IsDir проверяет, является ли запись директорией, Type возвращает битовую маску с типом записи, а Info возвращает подробную информацию типа os.FileInfo.
Синтаксис
type DirEntry interface {
Name() string
IsDir() bool
Type() FileMode
Info() (FileInfo, error)
}
Пример
Получим список записей в текущей директории и выведем имена и типы всех элементов:
package main
import (
"fmt"
"os"
)
func main() {
entries, err := os.ReadDir(".")
if err != nil {
fmt.Println("Error reading directory:", err)
return
}
for _, entry := range entries {
fmt.Printf("%s, isDir: %v\n", entry.Name(), entry.IsDir())
}
}
Пример
Проверим, является ли запись директорией, и получим детальную информацию через метод Info:
package main
import (
"fmt"
"os"
)
func main() {
entries, err := os.ReadDir(".")
if err != nil {
fmt.Println("Error reading directory:", err)
return
}
for _, entry := range entries {
if !entry.IsDir() {
info, err := entry.Info()
if err != nil {
fmt.Printf("Error getting info for %s: %v\n", entry.Name(), err)
continue
}
fmt.Printf("File: %s, Size: %d bytes\n", entry.Name(), info.Size())
}
}
}
Результат выполнения кода может выглядеть так:
"File: go.mod, Size: 42 bytes"
"File: main.go, Size: 128 bytes"
Пример
Используем метод Type для определения типа записи в виде битовой маски os.FileMode:
package main
import (
"fmt"
"os"
)
func main() {
entries, err := os.ReadDir(".")
if err != nil {
fmt.Println("Error reading directory:", err)
return
}
for _, entry := range entries {
mode := entry.Type()
fmt.Printf("%s: Type: %v\n", entry.Name(), mode)
}
}
Результат выполнения кода:
"go.mod: Type: -rw-r--r--"
"main.go: Type: -rw-r--r--"
"images: Type: drwxr-xr-x"
Смотрите также
-
функцию
os.ReadDir,
которая возвращает срезos.DirEntryдля указанной директории -
функцию
os.File.ReadDir,
которая читает содержимое открытого файла директории -
интерфейс
fs.DirEntry,
который используется в пакетеio/fsдля работы с файловыми системами -
тип
os.FileInfo,
который предоставляет более полную информацию о файле