fs::remove_file în Rust

remove_file șterge un fișier; remove_dir_all șterge un director cu tot conținutul lui. Ștergerea este definitivă.

Sintaxă
pub fn remove_file<P: AsRef<Path>>(path: P) -> io::Result<()>
pub fn remove_dir_all<P: AsRef<Path>>(path: P) -> io::Result<()>

Ce face fs::remove_file

fs::remove_file(cale) șterge un fișier. Dă eroare dacă fișierul nu există (NotFound) sau dacă este un director. fs::remove_dir_all(cale) șterge un director împreună cu toate fișierele și subdirectoarele din el. Pentru un director gol există și fs::remove_dir.

Fișierele nu ajung în Coșul de gunoi: sunt șterse definitiv. Verifică bine calea înainte, mai ales la remove_dir_all.

Parametri

Parametru Descriere
path Calea fișierului, respectiv a directorului, de șters.

Ce returnează

io::Result<()>.

Exemple

Exemplul 1: Ștergerea unui fișier temporar

A doua ștergere dă eroare, pentru că fișierul nu mai există. Tratăm separat cazul NotFound.

use std::fs;
use std::io::ErrorKind;
use std::path::Path;

fn main() -> std::io::Result<()> {
    fs::write("temp.txt", "date temporare")?;
    println!("există: {}", Path::new("temp.txt").exists());

    fs::remove_file("temp.txt")?;
    println!("după ștergere: {}", Path::new("temp.txt").exists());

    match fs::remove_file("temp.txt") {
        Ok(()) => println!("șters"),
        Err(e) if e.kind() == ErrorKind::NotFound => println!("nu era nimic de șters"),
        Err(e) => return Err(e),
    }
    Ok(())
}

Rezultat

există: true
după ștergere: false
nu era nimic de șters

Exemplul 2: Ștergerea unui director întreg

use std::fs;
use std::path::Path;

fn main() -> std::io::Result<()> {
    fs::create_dir_all("cache/imagini")?;
    fs::write("cache/index.txt", "1")?;
    fs::write("cache/imagini/a.png", [0u8; 16])?;

    println!("remove_dir pe director plin: {:?}", fs::remove_dir("cache").is_ok());
    fs::remove_dir_all("cache")?;
    println!("cache mai există: {}", Path::new("cache").exists());
    Ok(())
}

Rezultat

remove_dir pe director plin: false
cache mai există: false

Greșeli frecvente

  • Folosești remove_file pe un director: dă eroare. Pentru directoare există remove_dir (gol) și remove_dir_all (cu conținut).
  • Construiești calea pentru remove_dir_all din date venite de la utilizator fără verificare: poți șterge alt director decât cel dorit.

Comenzi înrudite

  • fs::create_dir_all: Creează un director împreună cu toți părinții lui care lipsesc; nu dă eroare dacă directorul există deja.
  • fs::rename: Redenumește sau mută un fișier ori un director; destinația existentă este înlocuită.
  • Path::exists: Întreabă sistemul dacă la cale există ceva (exists), dacă este un fișier (is_file) sau un director (is_dir).