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

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

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

ابدأ الدورة

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

\n\n

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

\n\n

الوحدات الأساسية للعمل مع نظام الملفات

\n\n

في Rust، يتركز العمل مع نظام الملفات في المكتبة القياسية. الوحدات الأساسية:

\n\n
    \n
  • std::fs — دوال للعمل مع الملفات والمجلدات (قراءة، كتابة، إنشاء، حذف).
  • \n
  • std::path — التعامل مع المسارات (Path, PathBuf).
  • \n
  • std::io — الإدخال والإخراج، بما في ذلك السمات Read و Write.
  • \n
\n\n

للبدء، يكفي استيراد الوحدات المطلوبة:

\n\n
use std::fs;\nuse std::path::Path;\nuse std::io::prelude::*;\nuse std::fs::File;
\n\n

قراءة الملفات في Rust

\n\n

أبسط طريقة لقراءة ملف كامل هي استخدام الدالة fs::read_to_string. تقوم بإرجاع Result<String>، مما يسمح بمعالجة الأخطاء بسهولة.

\n\n
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!("محتوى الملف:\\n{}", content),\n        Err(e) => eprintln!("خطأ في قراءة الملف: {}", e),\n    }\n}
\n\n

إذا كنت بحاجة لقراءة الملف سطرًا بسطر (مثل الملفات الكبيرة)، استخدم BufReader:

\n\n
use std::fs::File;\nuse std::io::{BufRead, BufReader};\n\nfn main() {\n    let file = File::open("example.txt").expect("فشل فتح الملف");\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!("خطأ في قراءة السطر: {}", e),\n        }\n    }\n}
\n\n

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

\n\n

لكتابة البيانات إلى ملف، استخدم fs::write (كتابة سلسلة نصية بسيطة) أو File::create مع الكتابة عبر write! أو writeln!.

\n\n
use std::fs;\n\nfn main() {\n    let content = "مرحبًا بالعالم!\\nهذا سطر للكتابة.";\n    fs::write("output.txt", content).expect("خطأ في كتابة الملف");\n    println!("تم كتابة الملف بنجاح");\n}
\n\n

للكتابة المتسلسلة أو إلحاق البيانات، استخدم OpenOptions:

\n\n
use std::fs::OpenOptions;\nuse std::io::Write;\n\nfn main() {\n    let mut file = OpenOptions::new()\n        .append(true)  // إلحاق الملف\n        .create(true)  // إنشاء إذا لم يكن موجودًا\n        .open("log.txt")\n        .expect("فشل فتح الملف");\n\n    writeln!(file, "تسجيل في السجل: {}", chrono::Local::now()).expect("خطأ في الكتابة");\n}
\n\n

العمل مع المجلدات والمسارات

\n\n

يوفر Rust أدوات مناسبة لإنشاء وحذف وتصفح المجلدات. دعنا نستعرض العمليات الأساسية.

\n\n

إنشاء وحذف المجلدات

\n\n
use std::fs;\n\nfn main() {\n    // إنشاء مجلد واحد\n    fs::create_dir("new_folder").expect("خطأ في إنشاء المجلد");\n    \n    // إنشاء مجلدات متداخلة (مشابه لـ mkdir -p)\n    fs::create_dir_all("parent/child/grandchild").expect("خطأ في إنشاء المجلدات المتداخلة");\n    \n    // حذف مجلد فارغ\n    fs::remove_dir("new_folder").expect("خطأ في حذف المجلد");\n    \n    // حذف مجلد بكل محتوياته\n    fs::remove_dir_all("parent").expect("خطأ في حذف المجلد بمحتوياته");\n}
\n\n

تصفح محتويات المجلد

\n\n

للحصول على قائمة بالملف

المدونات

توصيات الكتب