العمل مع نظام الملفات في Rust: أمثلة عملية ونصائح

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع نظام الملفات في Rust: عمليًا



Rust هي لغة نظام حديثة تمنح المطور تحكمًا كاملاً في الذاكرة مع ضمان الأمان. العمل مع نظام الملفات هو أحد المهام الأساسية التي يجب حلها في أي مشروع تقريبًا. في هذه المقالة، سنشرح كيفية قراءة وكتابة الملفات، وإدارة المجلدات، واجتياز الدلائل من خلال أمثلة عملية. جميع الأمثلة مكتوبة بلغة Rust وجاهزة للاستخدام.



الوحدات والهياكل الأساسية



في Rust، تتولى الوحدة std::fs (نظام الملفات) و std::path التعامل مع المسارات. الأنواع الرئيسية:



  • std::fs::File — يمثل ملفًا مفتوحًا.
  • std::fs::read_dir — مكرر لمحتويات الدليل.
  • std::path::Path و std::path::PathBuf — للتعامل مع المسارات.


استيراد الوحدات:



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


قراءة ملف كامل



أسهل طريقة لقراءة ملف نصي صغير هي استخدام الدالة fs::read_to_string. تُرجع Result<String>.



use std::fs;

fn main() { let content = fs::read_to_string("example.txt") .expect("تعذر قراءة الملف"); println!("محتوى الملف:{}", content);}


إذا كان الملف غير موجود أو لا توجد صلاحيات الوصول، سينتهي البرنامج بذعر. في المشاريع الحقيقية، استخدم match أو العامل ? لمعالجة الأخطاء.



معالجة الأخطاء عند القراءة



use std::fs;

fn read_file(path: &str) -> Result<String, std::io::Error> { fs::read_to_string(path)}

fn main() { match read_file("config.txt") { Ok(data) => println!("{}", data), Err(e) => eprintln!("خطأ: {}", e), }}


كتابة البيانات إلى ملف



للكتابة، يُستخدم fs::write (يكتب فوق الملف) أو إنشاء File مع خيارات OpenOptions.



كتابة سلسلة نصية بسيطة



use std::fs;

fn main() { let data = "Hello, Rust!"; fs::write("output.txt", data) .expect("تعذر كتابة الملف"); println!("تم كتابة الملف بنجاح");}


الإلحاق بنهاية الملف



use std::fs::OpenOptions;use std::io::Write;

fn main() { let mut file = OpenOptions::new() .append(true) .create(true) .open("log.txt") .expect("تعذر فتح الملف");

writeln!(file, "{} - كتابة في السجل", chrono::Local::now()) .expect("تعذرت الكتابة");}


لاحظ: OpenOptions يسمح بتكوين الوضع بمرونة — إنشاء، كتابة فوق، إلحاق، قراءة.



العمل مع المجلدات



إنشاء وحذف واجتياز المجلدات هي مهام شائعة. دعنا نستعرضها.



إنشاء مجلد جديد



use std::fs;

fn main() { fs::create_dir("new_folder") .expect("تعذر إنشاء المجلد"); // إنشاء مجلدات متداخلة (بشكل متكرر) fs::create_dir_all("parent/child/grandchild") .expect("تعذر إنشاء المجلدات المتداخلة");}


حذف مجلد



use std::fs;

fn main() { // حذف مجلد فارغ فقط fs::remove_dir("empty_folder").ok(); // حذف متكرر مع كل المحتويات fs::remove_dir_all("temp_data") .expect("تعذر حذف المجلد");}


كن حذرًا مع remove_dir_all — فهو يحذف كل المحتويات بشكل نهائي.



اجتياز محتويات الدليل



التكرار عبر الملفات والمجلدات داخل الدليل:



use std::fs;

fn main() { let entries = fs::read_dir(".") .expect("تعذر قراءة الدليل");\

المدونات

توصيات الكتب