Ce face File
File reprezintă un fișier deschis. File::open(cale) îl deschide doar pentru citire și dă eroare dacă nu există. File::create(cale) îl deschide pentru scriere: îl creează dacă lipsește și îl golește dacă există.
Citirea și scrierea se fac prin trait-urile std::io::Read și std::io::Write, care trebuie importate (use std::io::{Read, Write};). Pentru citire linie cu linie îl împachetezi într-un BufReader, iar pentru multe scrieri mici într-un BufWriter.
Fișierul se închide automat când variabila File iese din domeniu. Pentru alte moduri de deschidere (adăugare la final, creare doar dacă nu există) folosește File::options().
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea fișierului. |
Ce returnează
io::Result<File>.
Exemple
Exemplul 1: Scriere cu create, citire cu open
use std::fs::File;
use std::io::{Read, Write};
fn main() -> std::io::Result<()> {
let mut f = File::create("cumparaturi.txt")?;
writeln!(f, "lapte")?;
writeln!(f, "pâine")?;
f.write_all("ouă\n".as_bytes())?;
drop(f);
let mut text = String::new();
File::open("cumparaturi.txt")?.read_to_string(&mut text)?;
print!("{text}");
Ok(())
}
Rezultat
lapte
pâine
ouă
Exemplul 2: Erori tipice
open pe un fișier lipsă dă NotFound; scrierea într-un fișier deschis cu open eșuează, pentru că e doar pentru citire.
use std::fs::{self, File};
use std::io::Write;
fn main() {
println!("open lipsă: {:?}", File::open("lipsa.txt").map_err(|e| e.kind()));
fs::write("citire.txt", "abc").unwrap();
let mut f = File::open("citire.txt").unwrap();
println!("scriere în fișier deschis pentru citire: {}", f.write_all(b"x").is_err());
}
Rezultat
open lipsă: Err(NotFound)
scriere în fișier deschis pentru citire: true
Greșeli frecvente
- Uiți
use std::io::WritesauRead: eroareano method named `write_all` found. Metodele vin din trait-uri. - Deschizi cu
File::createun fișier la care voiai să adaugi: conținutul vechi este șters. FoloseșteFile::options().append(true).open(...). - Faci multe
writemici direct peFile: fiecare este un apel de sistem. Pune unBufWriterîn față.
Comenzi înrudite
OpenOptions: Deschide un fișier cu opțiuni alese: adăugare la final, creare dacă lipsește, doar dacă nu există etc.io::BufReader: Adaugă un buffer peste orice cititor (de obicei un File): citiri mai rapide și acces la metodele BufRead.io::BufWriter: Adaugă un buffer peste orice scriitor: strânge scrierile mici și le trimite în bucăți mari, mult mai rapid.io::Read: Trait-ul oricărei surse de octeți (fișier, stdin, rețea): read_to_string și read_to_end citesc tot ce a rămas.io::Write: Trait-ul oricărei destinații de octeți: write_all scrie tot bufferul, flush golește memoria tampon; permite write!.File::sync_all: Forțează scrierea datelor și a metadatelor fișierului pe disc, nu doar în memoria tampon a sistemului.