Ce face os.File.Stat
Stat returnează un os.FileInfo cu metodele Name(), Size() (octeți), Mode() (tip și drepturi), ModTime(), IsDir().
Funcția os.Stat(nume) dă aceleași informații fără să deschizi fișierul, iar os.Lstat nu urmează legăturile simbolice. Metoda f.Stat() e utilă când fișierul e deja deschis, de exemplu ca să afli dimensiunea înainte de citire.
Ce returnează
Un FileInfo și nil, sau o eroare.
Exemple
Exemplul 1: Informații despre un fișier
package main
import (
"fmt"
"os"
"time"
)
func main() {
os.WriteFile("raport.pdf", make([]byte, 2048), 0o644)
t := time.Date(2025, time.May, 10, 14, 0, 0, 0, time.UTC)
os.Chtimes("raport.pdf", t, t)
os.Chmod("raport.pdf", 0o640)
f, _ := os.Open("raport.pdf")
defer f.Close()
info, err := f.Stat()
if err != nil {
fmt.Println("eroare:", err)
return
}
fmt.Println("nume: ", info.Name())
fmt.Println("dimensiune:", info.Size(), "octeți")
fmt.Println("drepturi: ", info.Mode())
fmt.Println("modificat: ", info.ModTime().UTC().Format("02.01.2006 15:04"))
fmt.Println("director: ", info.IsDir())
}
Rezultat
nume: raport.pdf
dimensiune: 2048 octeți
drepturi: -rw-r-----
modificat: 10.05.2025 14:00
director: false
Exemplul 2: Refuzarea fișierelor prea mari
package main
import (
"fmt"
"os"
)
const limita = 1024 // octeți
func citeste(nume string) ([]byte, error) {
f, err := os.Open(nume)
if err != nil {
return nil, err
}
defer f.Close()
info, err := f.Stat()
if err != nil {
return nil, err
}
if info.Size() > limita {
return nil, fmt.Errorf("%s are %d octeți, limita este %d", nume, info.Size(), limita)
}
date := make([]byte, info.Size())
_, err = f.Read(date)
return date, err
}
func main() {
os.WriteFile("mic.txt", []byte("salut"), 0o644)
os.WriteFile("mare.bin", make([]byte, 5000), 0o644)
date, err := citeste("mic.txt")
fmt.Printf("%q %v\n", date, err)
_, err = citeste("mare.bin")
fmt.Println(err)
}
Rezultat
"salut" <nil>
mare.bin are 5000 octeți, limita este 1024
Greșeli frecvente
- Folosești
Size()pentru un director sau un fișier special (pipe,/proc) și te bazezi pe valoare. Pentru acestea dimensiunea nu are sens sau este 0.
Comenzi înrudite
os.File: Tipul care reprezintă un fișier deschis; îl obții cu os.Open, os.Create sau os.OpenFile.os.Chmod: Schimbă drepturile de acces (citire, scriere, execuție) ale unui fișier sau director.os.Chtimes: Schimbă data ultimului acces și data ultimei modificări ale unui fișier.os.SameFile: Spune dacă două FileInfo descriu același fișier de pe disc, chiar dacă au căi diferite.os.File.Name: Returnează numele cu care a fost deschis fișierul (calea dată la Open sau Create).os.Stat: Returnează informațiile unui fișier (dimensiune, drepturi, dată, director sau nu) fără să-l deschidă; Lstat nu urmează legăturile.