Ce face fs::read_to_string
fs::read_to_string("note.txt") deschide fișierul, îl citește în întregime și îl închide. Returnează Ok(String) cu tot textul sau Err(io::Error) dacă fișierul nu există, nu ai permisiuni sau conținutul nu este UTF-8 valid.
Este cea mai simplă metodă pentru fișiere mici și medii (configurări, liste, CSV-uri). Textul rezultat se parcurge de obicei cu .lines(). Pentru fișiere foarte mari, pe care nu vrei să le ții în memorie, citește linie cu linie cu BufReader. Calea poate fi &str, String, Path sau PathBuf.
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea fișierului, relativă la directorul curent sau absolută. |
Ce returnează
io::Result<String>: textul fișierului sau eroarea.
Exemple
Exemplul 1: Citire și prelucrare pe linii
Creăm întâi fișierul cu fs::write, apoi îl citim și calculăm media notelor.
use std::fs;
use std::io;
fn main() -> io::Result<()> {
fs::write("note.txt", "Ana 10\nMihai 8\nIoana 9\n")?;
let text = fs::read_to_string("note.txt")?;
let mut suma = 0;
let mut elevi = 0;
for linie in text.lines() {
if let Some((nume, nota)) = linie.split_once(' ') {
println!("{nume}: {nota}");
suma += nota.parse::<u32>().unwrap_or(0);
elevi += 1;
}
}
println!("media: {:.2}", suma as f64 / elevi as f64);
Ok(())
}
Rezultat
Ana: 10
Mihai: 8
Ioana: 9
media: 9.00
Exemplul 2: Tratarea erorii
Fișierul nu există. Mesajul vine de la sistemul de operare, iar kind() spune tipul erorii.
use std::fs;
fn main() {
match fs::read_to_string("lipsa.txt") {
Ok(text) => println!("am citit {} caractere", text.chars().count()),
Err(e) => println!("nu pot citi lipsa.txt: {e} (tip: {:?})", e.kind()),
}
}
Rezultat
nu pot citi lipsa.txt: No such file or directory (os error 2) (tip: NotFound)
Greșeli frecvente
- Citești un fișier binar (imagine, PDF) cu
read_to_string: eroareastream did not contain valid UTF-8. Foloseștefs::read. - Folosești căi relative și rulezi programul din alt director: calea este relativă la directorul curent al procesului, nu la fișierul sursă.
- Pe Windows, liniile se termină cu
\r\n.lines()elimină și\r, darsplit('\n')nu.
Comenzi înrudite
fs::write: Scrie tot conținutul dat într-un fișier, creându-l dacă nu există și înlocuindu-l dacă există.fs::read: Citește tot conținutul unui fișier ca octeți (Vec<u8>), fără să ceară ca textul să fie UTF-8.io::BufRead: Trait-ul cititorilor cu buffer: oferă citire pe linii (lines, read_line) pentru fișiere, stdin și octeți din memorie.io::Error: Eroarea operațiilor de intrare/ieșire; kind() dă categoria (NotFound, PermissionDenied…), iar new() creează una proprie.File: Un fișier deschis: File::open îl deschide pentru citire, File::create îl creează (sau golește) pentru scriere.