Ce face fs::rename
fs::rename(vechi, nou) schimbă numele sau locul unui fișier (sau director) în același sistem de fișiere. Operația este rapidă, pentru că nu copiază datele. Dacă destinația este un fișier existent, este înlocuită.
Între discuri sau partiții diferite, rename dă eroare (pe Linux CrossesDevices). În acest caz copiezi cu fs::copy și ștergi originalul.
Parametri
| Parametru | Descriere |
|---|---|
from |
Calea actuală. |
to |
Noua cale. |
Ce returnează
io::Result<()>.
Exemple
Exemplul 1: Redenumire și mutare într-un director
use std::fs;
use std::path::Path;
fn main() -> std::io::Result<()> {
fs::write("ciorna.txt", "Articol despre Rust")?;
fs::rename("ciorna.txt", "articol.txt")?;
println!("ciorna.txt există: {}", Path::new("ciorna.txt").exists());
fs::create_dir_all("publicate")?;
fs::rename("articol.txt", "publicate/rust.txt")?;
println!("conținut mutat: {}", fs::read_to_string("publicate/rust.txt")?);
Ok(())
}
Rezultat
ciorna.txt există: false
conținut mutat: Articol despre Rust
Exemplul 2: Salvare sigură: scrii într-un fișier temporar, apoi îl redenumești
Dacă programul se oprește în timpul scrierii, fișierul original rămâne întreg. Redenumirea înlocuiește fișierul vechi dintr-un singur pas.
use std::fs;
fn salveaza(cale: &str, continut: &str) -> std::io::Result<()> {
let temporar = format!("{cale}.tmp");
fs::write(&temporar, continut)?;
fs::rename(&temporar, cale)
}
fn main() -> std::io::Result<()> {
salveaza("scoruri.txt", "Ana 120\n")?;
salveaza("scoruri.txt", "Ana 150\nDan 90\n")?;
print!("{}", fs::read_to_string("scoruri.txt")?);
println!("rămas .tmp: {}", fs::metadata("scoruri.txt.tmp").is_ok());
Ok(())
}
Rezultat
Ana 150
Dan 90
rămas .tmp: false
Greșeli frecvente
- Folosești
renamepentru a muta pe alt disc: dă eroare. Copiază și șterge. - Te aștepți ca
renamesă refuze o destinație existentă: o înlocuiește fără avertisment.
Comenzi înrudite
fs::copy: Copiază conținutul unui fișier în altul (îl creează sau îl suprascrie) și returnează numărul de octeți copiați.fs::remove_file: remove_file șterge un fișier; remove_dir_all șterge un director cu tot conținutul lui. Ștergerea este definitivă.fs::write: Scrie tot conținutul dat într-un fișier, creându-l dacă nu există și înlocuindu-l dacă există.