Ce face fs::read
fs::read este varianta pentru date binare a lui read_to_string: returnează toți octeții fișierului într-un Vec<u8>. Merge pentru orice fișier: imagini, arhive, text în altă codificare.
Dacă vrei totuși text, poți încerca String::from_utf8(octeti) (dă eroare la octeți invalizi) sau String::from_utf8_lossy(&octeti) (înlocuiește octeții invalizi cu �).
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea fișierului. |
Ce returnează
io::Result<Vec<u8>>.
Exemple
Exemplul 1: Octeții unui fișier text
Literele cu diacritice ocupă câte doi octeți în UTF-8, deci Iași are 5 octeți.
use std::fs;
fn main() -> std::io::Result<()> {
fs::write("oras.txt", "Iași")?;
let octeti = fs::read("oras.txt")?;
println!("{} octeți: {:?}", octeti.len(), octeti);
println!("în hexazecimal: {:02X?}", octeti);
Ok(())
}
Rezultat
5 octeți: [73, 97, 200, 153, 105]
în hexazecimal: [49, 61, C8, 99, 69]
Exemplul 2: Recunoașterea tipului de fișier după primii octeți
Fișierele PNG încep cu octeții 89 50 4E 47. Creăm un fișier fals cu acest început și îl verificăm.
use std::fs;
fn tip_fisier(octeti: &[u8]) -> &'static str {
if octeti.starts_with(&[0x89, b'P', b'N', b'G']) {
"imagine PNG"
} else if octeti.starts_with(b"%PDF") {
"document PDF"
} else {
"necunoscut"
}
}
fn main() -> std::io::Result<()> {
fs::write("poza.png", [0x89, b'P', b'N', b'G', 13, 10, 26, 10])?;
fs::write("act.pdf", b"%PDF-1.7 ...")?;
fs::write("note.txt", "Ana 10")?;
for nume in ["poza.png", "act.pdf", "note.txt"] {
let octeti = fs::read(nume)?;
println!("{nume}: {} ({} octeți)", tip_fisier(&octeti), octeti.len());
}
let text = String::from_utf8_lossy(&fs::read("note.txt")?).into_owned();
println!("note.txt ca text: {text}");
Ok(())
}
Rezultat
poza.png: imagine PNG (8 octeți)
act.pdf: document PDF (12 octeți)
note.txt: necunoscut (6 octeți)
note.txt ca text: Ana 10
Greșeli frecvente
- Citești cu
fs::readfișiere de câțiva GB: totul ajunge în memorie. Citește în bucăți cuFileșiread.
Comenzi înrudite
fs::read_to_string: Citește tot conținutul unui fișier text într-un String, dintr-un singur apel.fs::write: Scrie tot conținutul dat într-un fișier, creându-l dacă nu există și înlocuindu-l dacă există.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.u8: Întreg fără semn pe 8 biți (0-255): tipul unui octet, folosit pentru date binare și text ASCII/UTF-8.