Boost.Filesystem في C++: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

Boost.Filesystem في C++: دليل شامل للتعامل مع نظام الملفات

Boost.Filesystem هي مكتبة C++ قوية وناضجة توفر واجهة موحدة (متعددة المنصات) لإجراء عمليات نظام الملفات. وهي جزء من مجموعة مكتبات Boost، وقد كانت النموذج الأولي للمكتبة القياسية <filesystem> في معيار C++17. إذا كنت تعمل مع C++11 أو C++14 وتحتاج إلى أداة موثوقة ومختبرة للتعامل مع المسارات والملفات والمجلدات، فإن Boost.Filesystem هي الخيار الأمثل لك.

لماذا تحتاج إليها؟ لفترة طويلة، لم توفر لغة C++ القياسية أدوات مدمجة لمهام بسيطة مثل التحقق من وجود ملف، إنشاء مجلد، أو التجوال المتكرر داخل المجلدات. كان على المطورين استخدام stat() في Linux أو GetFileAttributes() في Windows، مما يجعل الكود غير قابل للنقل بين المنصات. تحل Boost.Filesystem هذه المشكلة من خلال توفير API موحد يعمل بنفس الطريقة على جميع المنصات الرئيسية. تقوم المكتبة بتغليف استدعاءات النظام، وتتعامل مع ترميزات المسارات (مثل UTF-8 في Linux و UTF-16 في Windows)، وتقدم فئات سهلة الاستخدام للتعامل مع المسارات والتكرار عبر المجلدات.

في هذا المقال، سنشرح بالتفصيل كيفية تثبيت المكتبة، والفئات والطرق الأساسية، وسنقدم مثالاً عملياً حقيقياً يمكنك استخدامه في مشاريعك. سنركز على الإصدار Boost 1.84 (الأحدث وقت كتابة هذا المقال)، ولكن الأمثلة ستعمل مع الإصدارات الأقدم أيضاً.

تثبيت Boost.Filesystem

على عكس اللغات التي تحتوي على مديري حزم (مثل npm, pip)، تتطلب لغة C++ تجميع المكتبات. Boost.Filesystem ليست مكتبة "header-only" بالكامل؛ فجزء التعامل مع الملفات يتطلب مكتبة مُجمّعة (libboost_filesystem).

التثبيت عبر مدير الحزم (موصى به)

Ubuntu/Debian (Linux):

sudo apt update
sudo apt install libboost-filesystem-dev

macOS (Homebrew):

brew install boost

Windows (vcpkg):

vcpkg install boost-filesystem

التجميع من المصدر (إذا لم يتوفر مدير حزم)

# قم بتحميل Boost من الموقع الرسمي
wget https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz
tar -xzf boost_1_84_0.tar.gz
cd boost_1_84_0

# قم بتشغيل bootstrap
./bootstrap.sh

# قم بتجميع مكتبة filesystem فقط (لتوفير الوقت)
./b2 --with-filesystem

# قم بالتثبيت (عادة في /usr/local)
sudo ./b2 install

تجميع مشروع مع Boost.Filesystem

عند التجميع، يجب تحديد مسار ملفات الرأس (headers) والربط مع المكتبة:

g++ -std=c++11 -I/path/to/boost main.cpp -lboost_filesystem -lboost_system -o my_program

بداية سريعة: مثال عملي بسيط

لنكتب برنامجاً بسيطاً يتحقق من وجود ملف ويطبع حجمه.

#include <iostream>
#include <boost/filesystem.hpp>

namespace fs = boost::filesystem;

int main() {
    // مسار الملف
    fs::path file_path("example.txt");

    // التحقق من وجود الملف
    if (fs::exists(file_path)) {
        // الحصول على حجم الملف
        uintmax_t file_size = fs::file_size(file_path);
        std::cout << "الملف: " << file_path.filename() << std::endl;
        std::cout << "الحجم: " << file_size << " بايت" << std::endl;
    } else {
        std::cout << "الملف غير موجود." << std::endl;
    }

    return 0;
}

يوضح هذا الكود ثلاث ميزات رئيسية: إنشاء كائن مسار (fs::path)، التحقق من وجود ملف (fs::exists)، والحصول على حجمه.

توصيات