Ce face os.Truncate
os.Truncate aduce fișierul la exact size octeți. Dacă fișierul era mai mare, restul se pierde. Dacă era mai mic, se completează cu octeți 0. os.Truncate(nume, 0) golește fișierul.
Metoda (*os.File).Truncate face același lucru pe un fișier deja deschis pentru scriere. Atenție: nu mută poziția de scriere; după f.Truncate(0) apelează și f.Seek(0, io.SeekStart), altfel următoarea scriere lasă o gaură de octeți zero la început.
Parametri
| Parametru | Descriere |
|---|---|
name |
Calea fișierului (doar pentru os.Truncate). |
size |
Dimensiunea nouă, în octeți. |
Ce returnează
nil la succes sau eroarea.
Exemple
Exemplul 1: Tăierea unui fișier
package main
import (
"fmt"
"os"
)
func main() {
os.WriteFile("mesaj.txt", []byte("Salut din Iași!"), 0o644)
os.Truncate("mesaj.txt", 5)
date, _ := os.ReadFile("mesaj.txt")
fmt.Printf("%q\n", date)
os.Truncate("mesaj.txt", 8) // mai mare: completează cu zero
date, _ = os.ReadFile("mesaj.txt")
fmt.Printf("%q (%d octeți)\n", date, len(date))
}
Rezultat
"Salut"
"Salut\x00\x00\x00" (8 octeți)
Exemplul 2: Rescrierea unui fișier deschis
f.Truncate(0) golește fișierul, iar Seek mută poziția la început.
package main
import (
"fmt"
"io"
"os"
)
func main() {
os.WriteFile("contor.txt", []byte("vizite: 99"), 0o644)
f, err := os.OpenFile("contor.txt", os.O_RDWR, 0)
if err != nil {
fmt.Println("eroare:", err)
return
}
f.Truncate(0)
f.Seek(0, io.SeekStart)
f.WriteString("vizite: 100")
f.Close()
date, _ := os.ReadFile("contor.txt")
fmt.Printf("%q\n", date)
}
Rezultat
"vizite: 100"
Exemplul 3: Ce se întâmplă fără Seek
Poziția rămâne după ultimul octet scris, așa că noul text ajunge după 10 octeți zero.
package main
import (
"fmt"
"os"
)
func main() {
f, _ := os.Create("contor.txt")
f.WriteString("vizite: 99")
f.Truncate(0)
f.WriteString("100")
f.Close()
date, _ := os.ReadFile("contor.txt")
fmt.Printf("%q\n", date)
}
Rezultat
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00100"
Greșeli frecvente
- Uiți
Seek(0, io.SeekStart)dupăf.Truncate(0)și fișierul începe cu octeți zero. - Apelezi
Truncatepe un fișier deschis doar pentru citire (os.Open). Primești eroare; deschide-l cuos.O_RDWRsauos.O_WRONLY.
Comenzi înrudite
os.File.Seek: Mută poziția curentă de citire/scriere din fișier, față de început, de poziția curentă sau de final.os.WriteFile: Scrie octeții dați într-un fișier: îl creează dacă lipsește și îi înlocuiește conținutul dacă există.os.File: Tipul care reprezintă un fișier deschis; îl obții cu os.Open, os.Create sau os.OpenFile.os.File.Write: Scrie octeți (Write) sau text (WriteString) în fișier, la poziția curentă.