परिचय: C++ में फ़ाइल सिस्टम के साथ कार्य क्यों आवश्यक है
\n\nकोई भी गंभीर प्रोग्राम देर-सबेर डिस्क पर डेटा सहेजने या उसे वहाँ से पढ़ने की आवश्यकता का सामना करता है। कॉन्फ़िगरेशन फ़ाइलें, लॉग, डेटाबेस, उपयोगकर्ता दस्तावेज़ - इन सबके लिए फ़ाइल सिस्टम के साथ इंटरैक्ट करने की क्षमता की आवश्यकता होती है। C++ में इसके लिए दो मुख्य दृष्टिकोण हैं: क्लासिक इनपुट/आउटपुट स्ट्रीम (लाइब्रेरी <fstream>) और आधुनिक, अधिक उच्च-स्तरीय std::filesystem (C++17 से शुरू)।
इस लेख में, हम व्यावहारिक परिदृश्यों पर चर्चा करेंगे: सरल टेक्स्ट फ़ाइलों को पढ़ने और लिखने से लेकर निर्देशिकाओं में नेविगेट करने और त्रुटियों को संभालने तक। सभी उदाहरण C++17/20 में लिखे गए हैं और आपके प्रोजेक्ट में उपयोग के लिए तैयार हैं।
\n\n1. मूल बातें: fstream का उपयोग करके फ़ाइलें पढ़ना और लिखना
\n\nलाइब्रेरी <fstream> तीन मुख्य क्लास प्रदान करती है: ifstream (इनपुट स्ट्रीम - पढ़ना), ofstream (आउटपुट स्ट्रीम - लिखना) और fstream (द्विदिशात्मक स्ट्रीम)। आइए उदाहरणों के साथ इन्हें समझें।
1.1. टेक्स्ट फ़ाइल में लिखना
\n\nडेटा लिखने का सबसे सरल तरीका ofstream का उपयोग करना है। यदि फ़ाइल मौजूद नहीं है, तो वह बनाई जाएगी। यदि मौजूद है, तो उसे ओवरराइट किया जाएगा (डिफ़ॉल्ट मोड ios::trunc)।
#include <iostream>\n#include <fstream>\n#include <string>\n\nint main() {\n std::ofstream outFile("example.txt");\n if (!outFile) {\n std::cerr << "लिखने के लिए फ़ाइल खोलने में त्रुटि\\n";\n return 1;\n }\n\n outFile << "नमस्ते, C++ फ़ाइल सिस्टम!\\n";\n outFile << "पंक्ति संख्या 2\\n";\n outFile << 42 << " — यह एक संख्या है।\\n";\n\n outFile.close(); // मैन्युअल रूप से बंद करना अनिवार्य नहीं है, लेकिन अच्छा अभ्यास है\n std::cout << "डेटा लिखा गया।\\n";\n return 0;\n}\n\n1.2. टेक्स्ट फ़ाइल से पढ़ना
\n\nपढ़ने के लिए हम ifstream का उपयोग करते हैं। सबसे विश्वसनीय तरीका std::getline के माध्यम से पंक्ति दर पंक्ति पढ़ना है।
#include <iostream>\n#include <fstream>\n#include <string>\n\nint main() {\n std::ifstream inFile("example.txt");\n if (!inFile) {\n std::cerr << "फ़ाइल नहीं मिली या खोली नहीं जा सकी\\n";\n return 1;\n }\n\n std::string line;\n while (std::getline(inFile, line)) {\n std::cout << "पढ़ा गया: " << line << '\\n';\n }\n\n inFile.close();\n return 0;\n}\n\n1.3. खोलने के मोड और बाइनरी फ़ाइलें
\n\nआप खोलने के फ़्लैग को जोड़ सकते हैं: ios::app (जोड़ना), ios::binary (बाइनरी मोड), ios::ate (अंत में जाना)। बाइनरी फ़ाइलों के लिए read() और write() मेथड का उपयोग करें।
#include <fstream>\n#include <vector>\n\n// उदाहरण: बाइनरी प्रारूप में संख्याओं के वेक्टर को लिखना और पढ़ना\nvoid saveVector(const std::string& filename, const std::vector<int>& data) {\n std::ofstream file(filename, std::ios::binary);\n if (!file) return;\n file.write(reinterpret_cast<const char*>(data.data()), data.size() * sizeof(int));\n}\n\nstd::vector<int> loadVector(const std::string& filename) {\n std::ifstream file(filename, std::ios::binary);\n if (!file) return {};\n file.seekg(0, std::ios::end);\n size_t size = file.tellg() / sizeof(int);\n file.seekg(0, std::ios::beg);\n std::vector<int> data(size);\n file.read(reinterpret_cast<char*>(data.data()), size * sizeof(int));\n return data;\n}\n\n2. आधुनिक दृष्टिकोण: std::filesystem (C++17)
\n\nC++17 से शुरू करके, मानक लाइब्रेरी में मॉड्यूल <filesystem> शामिल किया गया, जो पथों, फ़ाइलों और निर्देशिकाओं के साथ उच्च स्तर पर, क्रॉस-प्लेटफ़ॉर्म रूप से कार्य करने की अनुमति देता है।
2.1. अस्तित्व की जाँच करना और फ़ाइल के बारे में जानकारी प्राप्त करना
\n\nऔर