Boost.Filesystem C++: फ़ाइल सिस्टम के साथ काम करने की संपूर्ण गाइड
Boost.Filesystem C++ की एक शक्तिशाली और परिपक्व लाइब्रेरी है, जो फ़ाइल सिस्टम ऑपरेशन के लिए एक पोर्टेबल (क्रॉस-प्लेटफ़ॉर्म) इंटरफ़ेस प्रदान करती है। यह Boost लाइब्रेरी कलेक्शन का हिस्सा है और C++17 में स्टैंडर्ड लाइब्रेरी <filesystem> का प्रोटोटाइप बन गई है। अगर आप C++11 या C++14 के साथ काम करते हैं और पथ, फ़ाइलों और डायरेक्ट्रीज़ के लिए एक भरोसेमंद टूल चाहते हैं, तो Boost.Filesystem आपके लिए सबसे अच्छा विकल्प है।
इसकी ज़रूरत क्यों है? लंबे समय तक, मानक C++ में फ़ाइल की मौजूदगी जाँचने, डायरेक्ट्री बनाने या फ़ोल्डर्स को रिकर्सिवली ट्रैवर्स करने जैसे सरल कार्यों के लिए कोई बिल्ट-इन सुविधा नहीं थी। डेवलपर्स को Linux पर stat() या Windows पर GetFileAttributes() का उपयोग करना पड़ता था, जिससे कोड पोर्टेबल नहीं रहता था। Boost.Filesystem इस समस्या को हल करता है, एक एकीकृत API प्रदान करके जो सभी प्रमुख प्लेटफ़ॉर्म पर समान रूप से काम करता है। यह लाइब्रेरी सिस्टम कॉल को एनकैप्सुलेट करती है, पथ एन्कोडिंग (जैसे Linux पर UTF-8 और Windows पर UTF-16) को हैंडल करती है, और पथ और डायरेक्ट्री इटरेशन के लिए सुविधाजनक क्लास प्रदान करती है।
इस लेख में, हम लाइब्रेरी की इंस्टॉलेशन, मुख्य क्लास और तरीकों को विस्तार से समझेंगे, और एक व्यावहारिक उदाहरण भी देंगे जिसे आप अपने प्रोजेक्ट्स में उपयोग कर सकते हैं। हम 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 के साथ प्रोजेक्ट कंपाइल करना
कंपाइल करते समय, हेडर फ़ाइलों का पथ और लाइब्रेरी से लिंक करना ज़रूरी है:
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), और उसका साइज़ प्राप्त करना