C++ में एक बाइनरी फ़ाइल लिखें

C Mem Eka Ba Inari Fa Ila Likhem



C++ प्रोग्रामिंग में, कच्चे डेटा को संग्रहीत करने और उसमें हेरफेर करने के लिए बाइनरी फ़ाइलों से निपटना मौलिक है। चाहे आप छवियों, ऑडियो फ़ाइलों या कस्टम डेटा संरचनाओं के साथ काम कर रहे हों, बाइनरी फ़ाइलों को कुशलतापूर्वक लिखने की क्षमता महत्वपूर्ण है। बाइनरी फ़ाइलें डेटा को ऐसे प्रारूप में संग्रहीत करती हैं जो मानव-पठनीय नहीं है, जो उन्हें विभिन्न अनुप्रयोगों जैसे कि जटिल संरचनाओं, छवियों, या किसी भी डेटा को संग्रहीत करने के लिए उपयुक्त बनाती है जो सरल पाठ-आधारित प्रतिनिधित्व का पालन नहीं करता है।

C++ बाइनरी डेटा लिखने के लिए बाइनरी फ़ाइलों, विशेष रूप से 'ऑफस्ट्रीम' क्लास के साथ इंटरैक्ट करने के लिए लाइब्रेरी प्रदान करता है। यह क्षमता डेवलपर्स को बाइनरी फ़ाइलों को निर्बाध रूप से बनाने, संशोधित करने और प्रबंधित करने की अनुमति देती है। यह आलेख C++ में बाइनरी फ़ाइलों को लिखने, उनके अनुप्रयोगों और उपयोग के मामलों पर प्रकाश डालने के लिए विभिन्न तरीकों और तकनीकों की पड़ताल करता है।

C++ का उपयोग करके एक बाइनरी फ़ाइल लिखें

C++ का उपयोग करके डेटा को बाइनरी फ़ाइल में सहेजने के लिए, राइट() विधि नियोजित की जाती है। यह फ़ंक्शन निर्दिष्ट स्ट्रीम में निर्दिष्ट संख्या में बाइट्स लिखता है, जो 'पुट' पॉइंटर के स्थान से शुरू होता है। यदि 'पुट' पॉइंटर अंत में है, तो फ़ाइल विस्तारित हो जाती है। हालाँकि, यदि पॉइंटर फ़ाइल के भीतर है तो नया डेटा मौजूदा वर्णों को अधिलेखित कर देता है। लेखन प्रक्रिया के दौरान किसी त्रुटि की स्थिति में, स्ट्रीम को त्रुटि स्थिति में चिह्नित किया जाता है। अब, आइए कुछ सरल और अंतर्निहित C++ फ़ंक्शंस का उपयोग करके बाइनरी फ़ाइल में लिखना सीखने के लिए उदाहरणों पर आगे बढ़ें।







विधि 1: संरचित डेटा के साथ बाइनरी फ़ाइलें लिखना

आपको कई मामलों में बाइनरी फ़ाइल में संरचित डेटा, जैसे कस्टम संरचनाएं, लिखने की आवश्यकता हो सकती है। आइए एक उदाहरण पर विचार करें जिसमें किसी व्यक्ति का रिकॉर्ड शामिल है जिसमें व्यक्ति का नाम, ऊंचाई और उम्र शामिल है। निम्नलिखित दिए गए कोड को देखें और स्पष्टीकरण पर एक नज़र डालें:



#शामिल करें

#शामिल

struct व्यक्ति {

चार नाम [ पचास ] ;

int यहाँ आयु ;

दोहरा ऊंचाई ;

} ;

int यहाँ मुख्य ( ) {

कक्षा :: ऑफस्ट्रीम आउटफ़ाइल ( 'लोग.बिन' , कक्षा :: आईओएस :: द्विआधारी ) ;

अगर ( ! आउटफ़ाइल। खुला है ( ) ) {

कक्षा :: सेर << 'त्रुटि! लिखने के लिए फ़ाइल नहीं खोली जा सकती!' << कक्षा :: अंतः ;

वापस करना 1 ;

}

व्यक्ति व्यक्ति1 = { 'कलसूम इलियास' , 25 , 1.75 } ;

व्यक्ति व्यक्ति2 = { 'कलसूम बाजवा' , 30 , 1.68 } ;

आउटफ़ाइल। लिखना ( पुनर्व्याख्या_कास्ट < चार *> ( & व्यक्ति 1 ) , का आकार ( व्यक्ति 1 ) ) ;

आउटफ़ाइल। लिखना ( पुनर्व्याख्या_कास्ट < चार *> ( & व्यक्ति2 ) , का आकार ( व्यक्ति2 ) ) ;

आउटफ़ाइल। बंद करना ( ) ;

कक्षा :: अदालत << 'व्यक्ति का रिकॉर्ड बाइनरी फ़ाइल में सफलतापूर्वक लिखा गया है।' << कक्षा :: अंतः ;

वापस करना 0 ;

}

यहां विशिष्ट विवरण के साथ कोड का विवरण दिया गया है। कार्यक्रम 'व्यक्ति' नामक एक कस्टम संरचना को परिभाषित करने के साथ शुरू होता है। इसमें तीन फ़ील्ड हैं: नाम, आयु और ऊंचाई। इन क्षेत्रों का विवरण इस प्रकार है:



  • नाम: व्यक्ति का नाम संग्रहीत करने के लिए एक स्ट्रिंग (50 अक्षर तक)
  • आयु: व्यक्ति की आयु संग्रहीत करने के लिए एक पूर्णांक
  • ऊंचाई: व्यक्ति की ऊंचाई को संग्रहीत करने के लिए एक डबल

'व्यक्ति' संरचना को परिभाषित करने के बाद, मुख्य कार्य शुरू होता है जो प्रोग्राम का प्रवेश बिंदु है। मुख्य प्रोग्राम की पहली पंक्ति 'people.bin' नाम की एक फ़ाइल खोलती है। हम बाइनरी प्रारूप में डेटा लिखने के लिए 'people.bin' नामक फ़ाइल बनाने के लिए 'std::ofstream' का उपयोग करते हैं। यह जाँचना कि फ़ाइल सफलतापूर्वक खुलती है या नहीं, बहुत महत्वपूर्ण है। अन्यथा, एक त्रुटि संदेश दिखाया जाता है और प्रोग्राम बंद हो जाता है। इसलिए, 'if' कंडीशन और is_open() फ़ंक्शन की सहायता से, हम जांचते हैं कि फ़ाइल सफलतापूर्वक खुल गई है या नहीं।





यहां, दो 'व्यक्ति' ऑब्जेक्ट बनाए गए हैं। हम 'व्यक्ति' प्रकार के दो चर, 'व्यक्ति1' और 'व्यक्ति2' को परिभाषित करते हैं। हम 'कलसूम इलियास' और 'कलसूम बाजवा' के लिए चर नाम, आयु और ऊंचाई मान निर्दिष्ट करते हैं।

अब जब हमारे पास बाइनरी फ़ाइल में लिखने के लिए डेटा है, तो आइए राइट() फ़ंक्शन के साथ वास्तविक फ़ंक्शन निष्पादित करें। हम फ़ाइल में प्रत्येक 'व्यक्ति' ऑब्जेक्ट की सामग्री लिखने के लिए 'outFile.write' का उपयोग करते हैं। 'reinterpret_cast(&person1)' और 'reinterpret_cast(&person2)' संपूर्ण 'व्यक्ति' संरचना (इसके सभी फ़ील्ड सहित) को बाइट्स की एक सतत स्ट्रीम में परिवर्तित करते हैं जो बाइनरी फ़ाइल में लिखने के लिए उपयुक्त है . यह सुनिश्चित करने के लिए कि सभी डेटा सही ढंग से लिखा गया है, हम प्रत्येक 'व्यक्ति' ऑब्जेक्ट का आकार 'आकार (व्यक्ति 1)' और 'आकार (व्यक्ति 2)' का उपयोग करके लिखते हैं।



फ़ाइल पर डेटा लिखने के बाद उसे ठीक से बंद करना बहुत ज़रूरी है ताकि किसी अन्य फ़ंक्शन के कारण कोई डेटा नष्ट न हो जाए। हम फ़ाइल से जुड़े संसाधनों को जारी करने और यह सुनिश्चित करने के लिए कि डेटा सटीक रूप से लिखा गया है, outFile.close() का उपयोग करते हैं। अंत में, हम एक संदेश प्रिंट करते हैं जो बाइनरी फ़ाइल में डेटा के सफल लेखन की पुष्टि करता है।

यदि हम इस उदाहरण को सरल शब्दों में समझाएं, तो एक विशेष नोटबुक की कल्पना करें जो केवल गुप्त भाषा में लोगों के बारे में जानकारी संग्रहीत कर सकती है। यह कोड जानकारी (नाम, उम्र, ऊंचाई) को व्यवस्थित करने के लिए एक खाका तैयार करता है। यह नोटबुक खोलता है, दो लोगों के प्रोफाइल भरता है, जानकारी को गुप्त भाषा में अनुवादित करता है, और इसे बड़े करीने से अंदर लिखता है। इसके बाद यह भविष्य में उपयोग के लिए प्रोफाइल को संरक्षित करते हुए, नोटबुक को सुरक्षित रूप से बंद कर देता है। प्रोग्राम के आउटपुट को देखें जो निम्नलिखित स्नैपशॉट में दिया गया है:

विधि 2: बाइनरी फ़ाइल में पूर्णांक लिखना

इस विधि में, पूर्णांकों की एक सरणी 'integers.bin' नामक बाइनरी फ़ाइल में लिखी जाती है। 'reinterpret_cast' फ़ाइल में लिखने के लिए पूर्णांक सरणी को वर्णों (बाइट्स) के अनुक्रम के रूप में मानता है। यह विशेष रूप से महत्वपूर्ण है क्योंकि बाइनरी फ़ाइलें कच्चे बाइट डेटा से निपटती हैं। आइए निम्नलिखित सरल उदाहरण पर नजर डालें:

#शामिल करें

#शामिल

int यहाँ मुख्य ( ) {

कक्षा :: ऑफस्ट्रीम आउटफ़ाइल ( 'पूर्णांक.बिन' , कक्षा :: आईओएस :: द्विआधारी ) ;

अगर ( ! आउटफ़ाइल। खुला है ( ) ) {

कक्षा :: सेर << 'त्रुटि! लिखने के लिए फ़ाइल नहीं खोली जा सकती!' << कक्षा :: अंतः ;

वापस करना 1 ;

}

int यहाँ नंबर [ ] = { 42 , 99 , - 1 , 0 } ;

आउटफ़ाइल। लिखना ( पुनर्व्याख्या_कास्ट < चार *> ( नंबर ) , का आकार ( नंबर ) ) ;

आउटफ़ाइल। बंद करना ( ) ;

कक्षा :: अदालत << 'दिए गए पूर्णांक बाइनरी फ़ाइल में सफलतापूर्वक लिखे गए।' << कक्षा :: अंतः ;

वापस करना 0 ;

}

यहां विशिष्ट विवरण के साथ कोड का विवरण दिया गया है:

'#include ' और '#include ' फाइलों के साथ काम करने और संदेशों को प्रिंट करने के लिए क्रमशः cin और write() जैसे आवश्यक उपकरण लाते हैं। 'std::ofstream outFile('integers.bin', std::ios::binary);' 'integers.bin' नामक एक बाइनरी फ़ाइल खोलता है जो संख्याओं को केवल एक गुप्त कोड (बाइनरी प्रारूप) में संग्रहीत कर सकता है। यह जाँचता है कि फ़ाइल खुली है या नहीं। अन्यथा, एक त्रुटि संदेश दिया जाता है.

अगली पंक्ति जो है 'int number[] = {42, 99, -1, 0};' पूर्णांक 42, 99, -1 और 0 के साथ 'संख्या' नामक एक सरणी को परिभाषित करता है। 'outFile.write(reinterpret_cast(numbers), sizeof(numbers));' पूर्णांकों को सावधानीपूर्वक बाइनरी प्रारूप में अनुवादित करता है और उन्हें 'integer.bin' फ़ाइल में लिखता है। 'आउटफ़ाइल.क्लोज़();' पूर्णांकों को सुरक्षित और व्यवस्थित रखने के लिए फ़ाइल को सही ढंग से बंद करता है। अंत में, यह पुष्टि करने के लिए एक संदेश मुद्रित किया जाता है कि पूर्णांकों को बाइनरी फ़ाइल में सफलतापूर्वक संग्रहीत किया गया है। परिणाम देखने के लिए इस प्रोग्राम के निम्नलिखित आउटपुट का संदर्भ लें:

निष्कर्ष

विभिन्न प्रकार के डेटा को कुशलतापूर्वक संभालने के लिए C++ में बाइनरी फ़ाइलें लिखना एक महत्वपूर्ण कौशल है। C++ में बाइनरी फ़ाइलें लिखने के इस अन्वेषण में, हमने सीखा है कि बाइनरी डेटा को कुशलतापूर्वक संभालने के लिए 'ऑफस्ट्रीम' वर्ग को कैसे नियोजित किया जा सकता है। चाहे कस्टम संरचनाओं का उपयोग करके सरल पूर्णांक या संरचित डेटा से निपटना हो, प्रक्रिया में फ़ाइल स्ट्रीम खोलना, बाइनरी प्रारूप में डेटा लिखना और फिर फ़ाइल को बंद करना शामिल है। यह क्षमता C++ डेवलपर्स को विभिन्न प्रकार के बाइनरी डेटा प्रकारों के साथ काम करने की सुविधा प्रदान करती है, जो सिस्टम-स्तरीय प्रोग्रामिंग से लेकर मल्टीमीडिया प्रोसेसिंग तक के अनुप्रयोगों में भाषा की बहुमुखी प्रतिभा में योगदान करती है।