Travailler avec le système de fichiers en Rust : en pratique
\n\nRust est un langage de programmation système moderne qui allie hautes performances et sécurité mémoire. L'une des tâches clés que chaque développeur rencontre est le travail avec le système de fichiers. Dans cet article, nous allons voir, à l'aide d'exemples pratiques, comment lire et écrire des fichiers, créer des répertoires, gérer les erreurs et effectuer d'autres opérations avec le système de fichiers en Rust.
\n\nModules principaux pour travailler avec le système de fichiers
\n\nEn Rust, tout le travail avec le système de fichiers est concentré dans la bibliothèque standard. Les modules principaux :
\n\n- \n
std::fs— fonctions pour travailler avec les fichiers et les répertoires (lecture, écriture, création, suppression). \n std::path— travail avec les chemins (Path,PathBuf). \n std::io— entrées-sorties, incluant les traitsReadetWrite. \n
Pour commencer, il suffit d'importer les modules nécessaires :
\n\nuse std::fs;\nuse std::path::Path;\nuse std::io::prelude::*;\nuse std::fs::File;\n\nLecture de fichiers en Rust
\n\nLa façon la plus simple de lire un fichier entier est d'utiliser la fonction fs::read_to_string. Elle retourne un Result<String>, ce qui permet de gérer facilement les erreurs.
use std::fs;\n\nfn main() {\n let file_path = "example.txt";\n \n match fs::read_to_string(file_path) {\n Ok(content) => println!("Contenu du fichier :\\n{}", content),\n Err(e) => eprintln!("Erreur de lecture du fichier : {}", e),\n }\n}\n\nSi vous devez lire un fichier ligne par ligne (par exemple, pour les gros fichiers), utilisez BufReader :
use std::fs::File;\nuse std::io::{BufRead, BufReader};\n\nfn main() {\n let file = File::open("example.txt").expect("Impossible d'ouvrir le fichier");\n let reader = BufReader::new(file);\n\n for line in reader.lines() {\n match line {\n Ok(content) => println!("{}", content),\n Err(e) => eprintln!("Erreur de lecture de la ligne : {}", e),\n }\n }\n}\n\nÉcriture de données dans des fichiers
\n\nPour écrire des données dans un fichier, utilisez fs::write (écriture simple d'une chaîne) ou File::create suivi d'une écriture via write! ou writeln!.
use std::fs;\n\nfn main() {\n let content = "Bonjour, le monde !\\nCeci est une ligne à écrire.";\n fs::write("output.txt", content).expect("Erreur d'écriture du fichier");\n println!("Fichier écrit avec succès");\n}\n\nPour une écriture séquentielle ou l'ajout de données, utilisez OpenOptions :
use std::fs::OpenOptions;\nuse std::io::Write;\n\nfn main() {\n let mut file = OpenOptions::new()\n .append(true) // ajout au fichier\n .create(true) // créer s'il n'existe pas\n .open("log.txt")\n .expect("Impossible d'ouvrir le fichier");\n\n writeln!(file, "Écriture dans le journal : {}", chrono::Local::now()).expect("Erreur d'écriture");\n}\n\nTravail avec les répertoires et les chemins
\n\nRust fournit des outils pratiques pour créer, supprimer et parcourir les répertoires. Examinons les opérations principales.
\n\nCréation et suppression de répertoires
\n\nuse std::fs;\n\nfn main() {\n // Création d'un seul répertoire\n fs::create_dir("new_folder").expect("Erreur de création du répertoire");\n \n // Création de répertoires imbriqués (équivalent de mkdir -p)\n fs::create_dir_all("parent/child/grandchild").expect("Erreur de création des répertoires imbriqués");\n \n // Suppression d'un répertoire vide\n fs::remove_dir("new_folder").expect("Erreur de suppression du répertoire");\n \n // Suppression d'un répertoire avec tout son contenu\n fs::remove_dir_all("parent").expect("Erreur de suppression du répertoire avec son contenu");\n}\n\nParcours du contenu d'un répertoire
\n\nPour obtenir la liste des fichiers