Wednesday 29 November 2017

सी फ़ाइल हैंडलिंग बाइनरी विकल्प


सी प्रोग्रामिंग फाइल (फाइलिंग) फाइलिंग ब्लॉकों (एफसीबी) के साथ फाइल हैंडलिंग के पिछले उदाहरणों को खोलें (), पढ़ने (), लिखने () और बंद करें () का उपयोग करते हुए। MSDOS v3.x (या अधिक) और यूनिक्स सिस्टम के तहत, फाइल हैंडलिंग को अक्सर फ़ाइल नियंत्रण ब्लॉकों के बजाय, हैंडल का उपयोग किया जाता है। हैंडल का इस्तेमाल करने वाले प्रोग्रामों को लिखना विभिन्न ऑपरेटिंग सिस्टम के बीच स्रोत कोड की पोर्टेबिलिटी सुनिश्चित करता है। हैंडल का इस्तेमाल करने से प्रोग्रामर फाइल को वर्णों की धारा के रूप में इस्तेमाल करने की अनुमति देता है। उपलब्ध पहुंच मोड हैं अनुमतियाँ हैं खुले () फ़ंक्शन एक पूर्णांक मान देता है, जिसका उपयोग फ़ाइल को संदर्भित करने के लिए किया जाता है। यदि अप्रमाणित, यह -1 देता है, और त्रुटि प्रकार को इंगित करने के लिए वैश्विक चर त्रुटि सेट करता है। पढ़ें () फ़ंक्शन संभाल से संबंधित फ़ाइल से nbytes को पढ़ने का प्रयास करता है, और बफर में वर्णों को पढ़ता है। यदि फ़ाइल को OTEXT का उपयोग करके खोला गया है, तो वह कैरिज रिटर्न को निकालता है और फ़ाइल के अंत का पता लगाता है। फ़ंक्शन पढ़ा बाइट्स की संख्या देता है। फाइल के समाप्त होने पर, 0 लौटाया जाता है, त्रुटि पर यह 1 लौटता है, गलत प्रकार की त्रुटि को इंगित करने के लिए errno सेट करना। लिखना () फ़ंक्शन बफर से संभाल के साथ फाइल से nbytes लिखने का प्रयास करता है पाठ फ़ाइलों पर, यह प्रत्येक एलएफ को सीआरएलएफ तक फैलता है। फ़ंक्शन फ़ाइल को लिखे गए बाइट्स की संख्या देता है। 1 का रिटर्न वैल्यू, एक त्रुटि इंगित करता है, गलत सेट के साथ उचित रूप से क्लोज़ () फ़ंक्शन संभाल के साथ फाइल को बंद कर देता है। फ़ंक्शन यदि सफल होता है, -1 त्रुटि को इंगित करने के लिए, गलत सेट के साथ उचित रूप से। कॉपीराइट बी ब्राउन 1984-1999। सभी अधिकार reserved. using नाम स्थान एसटीडी बुरा व्यवहार माना जाता है। तो आप उस से छुटकारा पाना चाहते हैं इसके बाद, आपको चर को बेहतर नाम देना चाहिए फ़ाइल और फ़ाइल 1 कुछ वर्णनात्मकता हैं दोनों आपको बताते हैं कि इसकी एक फाइल है, लेकिन न तो कहती है कि किस तरह की फाइल यह भी जांचें कि क्या आप वास्तव में फाइल को खोलने में सक्षम थे या नहीं उदाहरण के लिए, फ़ाइल केवल-लिख सकती है (और आपकी फ़ाइल. लिखित ()) काम करती है, लेकिन आपका file1.read () असफल हो जाती है), केवल-पढ़ने के लिए (और आपकी file. write () विफल हो जाती है, लेकिन आपकी file1.read () काम करता है), या न तो (और दोनों विफल)। कि क्या है 4. जिस तरह से आपकी ऊंचाई में तत्वों की संख्या एक जादू संख्या है। यह किसी बिंदु पर बदल सकता है, और आपको अपने कार्यक्रम में इसे अपडेट करना होगा। यह त्रुटि प्रवण है इस तरह से एक छोटे से कार्यक्रम के लिए कुछ ठीक है, लेकिन अधिक कार्यक्रमों में, आप उस नंबर को एक नाम (ऊपर देखें) देना चाहते हैं, कुछ ऐसा है जैसे HEIGHTLENGTH वही BINARY. DAT के लिए रखती है आप गलती से BINARY का उपयोग नहीं करना चाहते हैं। दूसरी बार डार करें। अंतिम लेकिन कम से कम नहीं: अंतिम रिज़ॉर्ट के रूप में सी-स्टाइल का इस्तेमाल करें। आप एक रीइंटरप्लेक्टलाटचार्ज खोज रहे हैं वैसे, यदि संभव हो तो, अपने वेरिएबल्स का दायरा छोटा रखें: Ive ने कुछ सफेद स्थान भी जोड़े। ध्यान रखें: आप दोनों मशीन और मशीन के लिए कोड लिखते हैं जो कि बाद में उस कोड को पढ़ने जा रहे हैं। वह मनुष्य आप या आपके पर्यवेक्षक हो सकता है सुनिश्चित करें कि इसकी आसानी से पढ़ें। सी आरए के साथ बायररी फ़ाइलें। फोर्ड गणित विभाग और कंप्यूटर साइंस माउंट एलीसन यूनिवर्सिटी स्केविले, एनबी परिचय फ़ाइल प्रसंस्करण के लिए धाराओं का उपयोग निश्चित रूप से सी में संभव है, लेकिन अधिकांश सी पाठ्यपुस्तकों में धाराओं की पूर्ण कार्यक्षमता के बारे में कोई जानकारी शामिल नहीं है। सी दस्तावेज़ पुस्तकालय के पूर्ण विवरण के साथ सी और डेटा संरचनाओं की पृष्ठभूमि वाले छात्रों की सहायता के लिए यह दस्तावेज़ बनाया गया है। यह दस्तावेज़ जीएनयू सीपीपी पुस्तकालय दस्तावेजों पर आधारित है, जो कभी-कभी पढ़ना आसान नहीं होता है, विशेषकर बिना उदाहरण के। सम्मिलन और निष्कर्षण ऑपरेटरों (यानी एलटीएलटी और पाठ फ़ाइलों से लिखने और पढ़ने के लिए कार्यक्रमों द्वारा उपयोग करने के लिए होती हैं, यह माना जाता है कि प्रोग्रामर इन दोनों फाइल प्रारूपों के बीच के अंतर से परिचित है। वास्तव में, सामान्य पाठ धाराओं का प्रलेखन। बाद में इस दस्तावेज़ में एक अतिरिक्त अनुभाग जोड़ दिया जाएगा। फ़ाइल IO की मूल बातें सी प्रोग्राम से एक बाइनरी फाइल में प्रवेश करना (पुरानी सी फ़ंक्शंस का उपयोग न करके) सबसे पहले फ़ाइल में एक स्ट्रीम वैरिएबल को संलग्न करना आवश्यक है स्ट्रीम की सामान्य स्ट्रीम कक्षाएं (आउटपुट फाइल स्ट्रीम) और ifstream (इनपुट फ़ाइल स्ट्रीम) अभी भी उपयोग करने के लिए धाराओं के प्रकार हैं। एक अतिरिक्त प्रकार जिसे एक एफस्ट्रीम कहा जाता है, प्रदान की जाती है जो ऐसी फ़ाइलों के लिए अनुमति देता है जिन्हें लिखा जा सकता है और अगर यह एक वांछनीय संपत्ति है (डाटाबेस प्रकार के कार्यक्रमों के डिजाइन में, यह अक्सर मामला होता है)। किसी भी आपरेशन से पहले फाइल पर जगह ले सकती है, निश्चित तौर पर इसे खोला जाना चाहिए। और जब आप फ़ाइल के साथ समाप्त हो जाएंगे, डेटा के नुकसान से बचने के लिए इसे बंद करना चाहिए स्ट्रीम को खोलना Istream और ofstream प्रत्येक के पास खुले नाम के सदस्य फ़ंक्शन होते हैं जो स्ट्रीम को भौतिक फ़ाइल नाम में संलग्न करने और पढ़ने या लिखने के लिए फ़ाइल खोलने के लिए उपयोग किया जाता है। खुले सदस्य कार्य में कुछ वैकल्पिक तर्क भी प्रदान किए जाते हैं जिन्हें अक्सर वर्णित नहीं किया जाता है। इस फ़ंक्शन का सबसे सामान्य प्रोटोटाइप यह है कि Ive का उपयोग किया गया प्रारूप इंगित करता है कि मोड और प्रोटोटाट तर्क वैकल्पिक हैं। पहला तर्क हमेशा उस डिस्क पर फ़ाइल का नाम होता है, जिसमें स्ट्रीम को संलग्न किया जाएगा। कॉन्स्ट मॉडरफेयर को शामिल किया गया है ताकि एक प्रोग्रामर फ़ंक्शन कॉल में फ़ाइल का नाम (डबल कोट्स के अंदर) लिख सकता है। खुले सदस्य समारोह का उपयोग करने के बारे में केवल मुश्किल भाग डीओएस आधारित सिस्टम (विंडोज में शामिल है) के अंतर्गत है जिसमें डायरेक्टरी को याद किया जाता है कि बैकस्लैश वर्ण का सी स्ट्रिंग्स में एक विशेष अर्थ है। यूनिक्स के रूप में बहुउपयोगकर्ता ऑपरेटिंग सिस्टम के तहत फ़ाइल की सुरक्षा (अनुमति) को निर्दिष्ट करने के लिए प्रोटॉन पैरामीटर का उपयोग किया जाता है यह आपको यह निर्दिष्ट करने की अनुमति देता है कि कौन सी उपयोगकर्ता इस फ़ाइल को देखने की अनुमति है। डॉसविंडो के तहत, इस पैरामीटर का कभी इस्तेमाल नहीं किया जाता है। पाठ पैरामीटर आमतौर पर पाठ फ़ाइलों के साथ काम करते समय बाहर छोड़ा जाता है, लेकिन बाइनरी फ़ाइलों के तहत कुछ बहुत उपयोगी स्थितियां हैं जिसके लिए यह पैरामीटर सेट होना चाहिए। इस पैरामीटर के लिए कई विकल्प दिए जा सकते हैं यदि आप उनमें से एक से अधिक निर्दिष्ट करने की आवश्यकता है तो बस उनके बीच एक लंबवत पट्टी रखें। IOS :: में यह इंगित करता है कि स्ट्रीम इनपुट के लिए उपयोग किया जाएगा यह इन्सस्ट्रीम के लिए बेमानी लग सकता है जो कि इनपुट के लिए स्वचालित रूप से चिह्नित किए जाते हैं जब वे खोले जाते हैं, लेकिन इसका इस्तेमाल कभी-कभी होता है जब आप दूसरे पैरामीटर के साथ खुला कॉल करते हैं, तो पैरामीटर को IOS :: में माना जाता है, लेकिन अगर आप कोई अन्य पैरामीटर जैसे आईओएस: द्विआधारी देते हैं तो आपको निर्दिष्ट करना होगा कि फाइल एक इनपुट फाइल है और साथ ही यह भी है। आईओएस :: आउट यह इंगित करता है कि स्ट्रीम को आउटपुट के लिए इस्तेमाल किया जाएगा। आईओएस की तरह :: इसमें ओस्ट्रीम के लिए बेमानी लग सकता है लेकिन इसके बाद के संस्करण के अनुसार, यह आमतौर पर दिया जाना चाहिए। ios :: ate यह फाइल सूचक खोला जाने पर फ़ाइल के अंत में इंगित करने के लिए कारण होता है। ios :: trunc यह फ़ाइल में सभी मौजूदा डेटा को खारिज कर दिया जाता है (मिट) जब फ़ाइल खोली जाती है। बहुत सावधान रहें कि इस विकल्प को उस फ़ाइल पर उपयोग न करें जिसे आप नष्ट नहीं करना चाहते Ios :: binary इस कारण फ़ाइल को बाइनरी फ़ाइल के रूप में पहुंचाया जा सकता है। सबसे अधिक संभावना है कि आपको यह विकल्प सेट करना होगा। यदि आप इस विकल्प को सेट करना भूल जाते हैं, तो कई अजीब समस्याएं उत्पन्न होती हैं, जैसे कि कुछ वर्णों को पढ़ते हुए लाइन के अंत और फ़ाइल के अंत। एक बाइनरी फाइल खोलने का उदाहरण: एक बाइनरी फ़ाइल में लेखन मैंने एक बार उल्लेख किया है कि लिट्लटी का उपयोग किसी पाठ फ़ाइल में डेटा लिखने के लिए किया जाता है। यदि आपके पास एक वेरिएबल एक्स होता है जिसमें मान 354 होता है और आपने स्टेटमेंट आउटफाइल एलटीएलटी एक्स का इस्तेमाल किया था तो यह चरित्र 3, चरित्र 5 और वर्ण 4 को फाइल में लिखा जाएगा (एएससीआईआई फॉर्म में) फ़ाइल में। यह बाइनरी फॉर्म नहीं है, जिसे केवल 16 बिट्स की आवश्यकता होगी। ऑफस्ट्रीम वर्ग नामित एक सदस्य फ़ंक्शन प्रदान करता है जो जानकारी को बाइनरी रूप में स्ट्रीम में लिखे जाने की अनुमति देता है। लेखन फ़ंक्शन के प्रोटोटाइप यह फ़ंक्शन का कारण बनता है n बाइट डिस्क को बफर द्वारा दी गई मेमोरी स्थान से लिखे जाने के लिए और फ़ाइल सूचक को आगे बाइट्स में ले जाता है। मापदंडों के प्रकार को थोड़ा सा विवरण की आवश्यकता होती है हालांकि वापसी का प्रकार ऑफस्ट्रीमैम्प है, हालांकि रिटर्न वैल्यू आमतौर पर अधिकांश प्रोग्रामर्स द्वारा अनदेखा कर दी जाती है। बफर पॉइंटर प्रकार रहित है, यह किसी भी प्रकार के चर को पहले पैरामीटर के रूप में उपयोग करने की अनुमति देता है। आपको शून्य पैरामीटर के साथ कार्य लेखन नहीं करना चाहिए, यह प्रोग्रामिंग का एक बहुत मुश्किल हिस्सा है। प्रकार स्ट्रीमसिस केवल एक सकारात्मक पूर्णांक है यह दुर्लभ है कि आपको पता चल जाएगा कि एक विशेष चर कितनी बाइट है। इस जानकारी को प्राप्त करने के लिए, सी मैक्रो (इसकी तरह एक फंक्शन) नामक आकार देता है जो कि एक पैरामीटर लेता है और स्टोरेज के लिए बाइट्स के संदर्भ में पैरामीटर का आकार देता है। नीचे एक चर के आकार को प्राप्त करने के लिए आकार के मैक्रो का उपयोग करने और डिस्क पर एक वैरिएबल की सामग्री लिखने का एक उदाहरण है। एक वर्ग के बजाय एक संरचना के उपयोग की सूचना दें जिसे आप कक्षाओं को द्विआधारी फ़ाइलों में लिखने के लिए इस पद्धति का उपयोग नहीं करना चाहिए। यह कैसे किया जाना चाहिए, इसके विवरण के लिए फ़ाइलों को लेखन वर्ग वाले शीर्षक देखें। बाइनरी फाइल से डेटा पढ़ना एक बाइनरी फ़ाइल से पढ़ना बस इसे लिखने की तरह ही है, सिवाय इसके कि फ़ंक्शन को अभी लिखने के बजाय पढ़ा जाता है जब एक फ़ाइल से डेटा पढ़ते हुए कुछ नई चीजें हैं जो देखने के लिए हैं: यह जिम्मेदारी है प्रोग्रामर को यह सुनिश्चित करने के लिए कि बफर सभी डेटा जो कि पढ़ा जा रहा है, रखना है। निम्नलिखित कोड सेगमेंट शायद दुर्घटना का परिणाम होगा, जब तक कि एक पूर्णांक का आकार 7 बाइट्स (संभावित संख्या) नहीं होता है: int main () int x ifstream infile infile. open (silly. dat, ios :: binary ios :: in) infile. read (ampx, 7) 7 बाइट्स को उस कक्ष में पढ़ता है जो या तो 2 या 4 फ़ाइल से कुछ पढ़ने के बाद, असफल () सदस्य फ़ंक्शन को यह निर्धारित करने के लिए कहा जाना चाहिए कि ऑपरेशन सफलतापूर्वक पूरा हो गया है या नहीं। सी में, कोई फाइल आपरेशन के कारण कार्यक्रम को रोकना नहीं है यदि कोई त्रुटि आती है और आप इसकी जांच नहीं करते हैं, तो आपका प्रोग्राम अविश्वसनीय रूप से चल रहा होगा त्रुटियों का पता लगाने के संबंध में इस दस्तावेज़ में एक खंड आगे देखें। फ़ाइल पॉइंटर जब भी किसी फ़ाइल से डेटा पढ़ा या लिखा जाता है, तो डेटा पॉइंटर द्वारा वर्णित फ़ाइल के भीतर डेटा को स्थान दिया जाता है या लिया जाता है। अनुक्रमिक एक्सेस फ़ाइल में, जानकारी को हमेशा से शुरू से समाप्त होता है और हर बार एन बाइट पढ़ या लिखे जाते हैं, फ़ाइल सूचक आगे n बाइट्स ले जाते हैं एक यादृच्छिक अभिगम फ़ाइल में, हमें फाइल पॉइंटर को अलग-अलग स्थानों पर स्थानांतरित करने की अनुमति दी जाती है ताकि फाइल के भीतर विभिन्न स्थानों पर डेटा पढ़ा जा सके। स्टोर आइटम से भरा एक डेटाबेस के बारे में सोचो जब आइटम चेकआउट में स्कैन किया जाता है, तो बारकोड का उपयोग विवरण और आइटम की कीमत देखने के लिए किया जाता है। यदि फ़ाइल अनुक्रमिक पहुंच थी, तो हमें उस फ़ाइल की शुरुआत में खोजना शुरू करना होगा जो शायद हम चाहते हैं की तुलना में धीमी है यह फ़ाइल प्रोसेसिंग में एक कोर्स नहीं है, लेकिन यह कहना पर्याप्त है कि अगर हम फ़ाइल सूचक को सीधे डेटा में रिकॉर्ड कर सकते हैं, तो हमें सिर्फ एक बार फाइल से पढ़ना होगा। Tellp () सदस्य फ़ंक्शन का एक प्रोटोटाइप है प्रपत्र यह फ़ंक्शन कोई पैरामीटर स्वीकार नहीं करता है, लेकिन फाइल की शुरुआत से बाइट्स में दिया गया स्थान देता है जहां फ़ाइल सूचक वर्तमान में बैठे है। अगले स्थान पर पढ़ा या लिखना होगा। Seekp () सदस्य फ़ंक्शन फॉर्म रहित seekp (streampos स्थान, पूर्णांक सापेक्ष) के एक प्रोटोटाइप है, इस कारण फ़ाइल सूचक फ़ाइल के दूसरे स्थान पर स्थानांतरित हो जाता है। स्थान बाइट्स की संख्या को निर्दिष्ट करता है जो स्थान निर्धारित करने के लिए उपयोग किया जाएगा और सापेक्ष पैरामीटर यह इंगित करता है कि क्या यह कुछ प्रकार की पूर्ण या सापेक्ष स्थिति अनुरोध है। रिश्तेदार के लिए संभावित मूल्य हैं: ios :: beg है यह इंगित करता है कि स्थान फाइल की शुरुआत से बाइट्स की संख्या है। ios :: cur यह इंगित करता है कि स्थान वर्तमान फ़ाइल सूचक स्थान से बाइट्स की संख्या है। यह फ़ाइल सूचक की एक रिश्तेदार स्थिति के लिए अनुमति देता है। ios :: end यह इंगित करता है कि स्थान फाइल के अंत से बाइट्स की संख्या है। हम एक ऐसे उदाहरण पर विचार करते हैं जो फ़ाइल सूचक स्थान प्राप्त करने और सेट करने का उपयोग करती है: int main () int x streampos pos ifstream infile infile. open (silly. dat, ios :: binary ios :: in) infile. seekp (243, ios: : beg) फ़ाइल साइज में 243 बाइट्स को ले जाएं। (एफ़पीएक्स, साइज़फ़ (एक्स)) पीडी infile. tellg () cout ltlt फ़ाइल सूचक अब स्थान पर है ltlt pos ltlt endl infile. seekp (0, ios :: end) फ़ाइल infile. seekp (-10, आईओएस :: क्यू) के अंत तक की तलाश करें 10 बाइट्स अप infile. close () बाइनरी फ़ाइलों को क्लास लिखना फ़ाइलों में अभिलेखों को स्टोर करने का सबसे आसान तरीका एक संरचना का उपयोग करना है यदि आप रखते हैं कक्षाओं का उपयोग करते हुए मेमोरी संरचनाओं में अभिलेखों का ट्रैक रखें, फिर इन कक्षाओं को डिस्क में सहेजे जाने पर थोड़ा अतिरिक्त कार्य होता है आप केवल लिखने वाले सदस्य फ़ंक्शन का उपयोग नहीं कर सकते हैं और बफर के रूप में ऑब्जेक्ट का पता दे सकते हैं। इसके लिए कारण सदस्य कार्यों की उपस्थिति है यह सदस्य कार्यों को बचाने में कोई मतलब नहीं होगा, इन सदस्य कार्यों को स्मृति स्थानों के रूप में सहेजते रहेंगे जो आपके कंप्यूटर को दुर्घटना के कारण पैदा करेगा यदि आप कभी भी डिस्क से एक पुराने स्मृति स्थान के साथ लोड करते हैं ऑब्जेक्ट्स को डिस्क पर लिखना संभव है लेकिन इसकी आवश्यकता है कि ऑब्जेक्ट में इसके साथ संबद्ध सदस्य फ़ंक्शन होता है। मेरा सामान्य दृष्टिकोण प्रत्येक सदस्य समारोह में पढ़ने और लिखने वाले सदस्य फ़ंक्शन को सम्मिलित करना है। इन फ़ंक्शंस को एक फीस्ट्रीम को एक पैरामीटर के रूप में ले जाना चाहिए ताकि वह खुद को बचाने के लिए स्ट्रीम हो। अपने प्रोग्राम को तब स्ट्रीम खोलना चाहिए और उपयुक्त फ़ंक्शन के साथ सदस्य फ़ंक्शन को कॉल करना चाहिए। सदस्य फ़ंक्शन को किसी विशेष क्रम में लिखने वाले ऑब्जेक्ट के प्रत्येक डेटा फ़ील्ड के माध्यम से जाना चाहिए। पढ़ने वाले सदस्य फ़ंक्शन डिस्क से जानकारी उसी क्रम में पुनर्प्राप्त करना चाहिए। इस खंड का उदाहरण थोड़ा सा शामिल है, इसलिए Ive ने गैर-फ़ाइल सदस्य कार्यों का सफाया कर दिया। शुरू में शामिल हैं ltiostdream. h शामिल ltstdlib. h शामिल हैं ltfstream. h। इस खंड में गलत क्या हुआ, मैं एक फाइल संचालन सफल रहा था और यदि नहीं, तो यह निर्धारित करने के कुछ तरीके बताएंगे कि क्या लगभग गलत तरीके से निर्धारित करने के कुछ तरीके । प्रत्येक डिस्क संचालन के बाद, एक अच्छी तरह से लिखा कार्यक्रम सदस्य फंक्शन को कॉल करेगा () यह देखने के लिए कि ऑपरेशन सफलतापूर्वक पूरा हो गया है या नहीं। यह निर्धारित करने के लिए प्रोग्रामर पर निर्भर है कि फ़ाइल ऑपरेशन खराब होने पर क्या हो सकता है अनिवार्यतः तीन संभावनाएं हैं: समस्या पर ध्यान न दें और आशा है कि कभी ऐसा नहीं होता। यह एक विचार का परीक्षण करने के लिए लिखे गए छोटे कार्यक्रमों के लिए त्रुटियों से निपटने के लिए एक अच्छा तरीका है, लेकिन एक प्रोग्राम का पूरी तरह से काम करने वाला संस्करण यह कभी नहीं सोचना चाहिए कि उपयोगकर्ता कोई गलती नहीं करेगा। यदि कोई त्रुटि आती है, तो कॉल निकास (EXITFAILURE) और कार्यक्रम समाप्त हो जाएगा। यह सिर्फ उम्मीद नहीं है कि ऐसा होता है, लेकिन यह एक प्रोग्राम के पूर्ण संस्करण में है, यह उपयोगकर्ता के लिए एक वास्तविक उपद्रव हो सकता है। अगर आप निबंध लिखते समय 5 घंटे बिताते हैं तो क्या होगा, फिर इसे टी को बचाने की कोशिश की: जो कि अस्तित्व में नहीं था। यदि आपका कार्यक्रम अभी ही निरस्त हुआ तो आप 5 घंटे काम खो देंगे। जब कोई त्रुटि आती है, तो उपयोगकर्ता को त्रुटि को ठीक करने का प्रयास करें और फिर से कार्रवाई का प्रयास करें। जहां तक ​​उपयोगकर्ता का संबंध है, यह सबसे पसंदीदा तरीका है, लेकिन आम तौर पर कार्यक्रम के लिए तुच्छ नहीं है। आपको यथासंभव इसे लागू करने का प्रयास करना चाहिए। त्रुटियों से निपटने के समय एक दुर्भाग्यपूर्ण स्थिति उत्पन्न होती है, ये आमतौर पर भौतिक चीजें होती हैं जो उन्हें ऑपरेटिंग सिस्टम पर निर्भर करती हैं। इसके बाद, मैं त्रुटियों से निपटने के लिए एएनएसआई (मानक) दृष्टिकोण और त्रुटियों से निपटने के लिए डॉस दृष्टिकोण की सूची देगा। एएनएसआई दृष्टिकोण बहुत अधिक सामान्य है और इसलिए त्रुटि संदेश सटीक नहीं होंगे, लेकिन एएनएसआई दृष्टिकोण कोई भी काम नहीं करेगा, जो सी संकलक आप उपयोग करते हैं। डॉस त्रुटि हैंडलिंग कुछ होने के बारे में कुछ भ्रम को समाप्त करती है, लेकिन स्पष्ट रूप से केवल डॉस मशीनों पर ही अच्छा होता है जो लाइब्रेरी (टर्बो सी, बोरलैंड सी, और जीएनयू जी का समर्थन इस लाइब्रेरी) का समर्थन करते हैं। चीजों को थोड़ा सा बेवकूफ बनाने के लिए, असफल () फ़ंक्शन के अलावा अन्य नदियों में निर्मित कोई त्रुटि समर्थन नहीं प्रतीत होता है। त्रुटियों से निपटने के लिए हमें कुछ मौजूदा सी फ़ंक्शंस पर भरोसा करना पड़ता है जो सी से उपयोग करने में कोई समस्या नहीं है क्योंकि सी केवल सी का विस्तार है। एएनएसआई त्रुटियाँ एएनएसआई सी एक ग्लोबल वैरिएबल (ओह न, ग्लोबल वैरिएबल) का समर्थन करता है जो कि गलत नाम दिया जा सकता है errorno. h भी शामिल है जब त्रुटियों को चर एक मानक त्रुटि कोड पर सेट किया जाता है जो सभी ऑपरेटिंग सिस्टम के बराबर होना चाहिए। इस दस्तावेज़ में सूचीबद्ध करने के लिए बहुत अधिक त्रुटि कोड मौजूद हैं I आम तौर पर सभी त्रुटि कोडों को खोजने का सबसे अच्छा तरीका है मैन्युअल पृष्ठ को देखना या ऑनलाइन त्रुटि के खोज पर ऑनलाइन मदद करना शामिल करना फ़ाइल में स्थिरांक का एक सेट परिभाषित करता है जो उस त्रुटि के प्रकार को निर्धारित करने के लिए उपयोग किया जा सकता है उदाहरण के लिए, त्रुटि कोड 22 इंगित करता है कि जिस फाइल को आपने खोलने का प्रयास किया वह मौजूद नहीं था। 22 कहने का एक बेहतर तरीका है निरंतर ENOENT का उपयोग करना Stdio. h में नामित एक समारोह है, जो एक स्ट्रिंग को पैरामीटर के रूप में लेता है। जब यह फ़ंक्शन कहा जाता है, स्ट्रिंग स्क्रीन पर प्रदर्शित होती है, उसके बाद एक बृहदान्त्र के बाद एक संदेश द्वारा त्रुटि के मूल्य का वर्णन करता है यह आसान हो सकता है अगर आप त्रुटि हैंडलर नहीं लिखना चाहते हैं और सिर्फ प्रोग्राम को रोकने के लिए चाहते हैं। नीचे एक सरल प्रोग्राम है जो उपयोगकर्ता से फ़ाइल नाम पढ़ता है, फ़ाइल खोलता है और यह दर्शाता है कि ड्राइव तैयार नहीं था, फ़ाइल मौजूद नहीं थी या मानक त्रुटि संदेश। मुख्य () ifstream डेटा char filename50 cout ltlt फ़ाइल को खोलने के लिए cin. getline (फ़ाइल नाम, 50) डेटा। open (फ़ाइल नाम) अगर (data. fail ()) स्विच (गलत) केस EACCES: यह सेट है अगर ड्राइव तैयार नहीं है डीओएस cout ltlt ड्राइव में तैयार नहीं है या अनुमति अस्वीकृत एलटीएलटी एंडल ब्रेक केस ENOENT: cout ltlt इस फ़ाइल को नहीं मिल सका ltlt एंडल ब्रेक डिफॉल्ट: पीरर (डेटा फ़ाइल खोलना) बाहर निकलें (EXITFAILURE) एक वास्तविक प्रोग्राम तब वापस लूप करेगा और उपयोगकर्ता को पुनः प्रयास करें। । डॉस विस्तारित त्रुटियाँ यदि आप एएनएसआई सूची में दी गई त्रुटियों को देखते हैं तो आप देखेंगे कि उनमें से कई वास्तव में डॉस की दिशा में तैयार नहीं हैं I. e। आप यह सुनिश्चित करने के लिए नहीं जानते हैं कि कोई डिस्क डिस्क पर खराब थी या ड्राइव का दरवाज़ा खुला था। यह इसलिए है क्योंकि एएनएसआई मानक यूनिक्स सिस्टम पर कम या ज्यादा परिभाषित किया गया था, जहां इन प्रकार की त्रुटियों को कभी भी उपयोगकर्ताओं द्वारा नहीं देखा जाता है। अधिकांश डॉस आधारित कंपाइलर्स डीओएस विस्तारित त्रुटि को प्राप्त करने के लिए कुछ फ़ंक्शन प्रदान करते हैं, जो त्रुटि के बारे में अधिक सटीक विवरण प्रदान करता है। सी भाषा में फाइल हैंडलिंग एक फ़ाइल उस डिस्क पर बाइट्स के अनुक्रम का प्रतिनिधित्व करती है जहां संबंधित डेटा का एक समूह संग्रहीत होता है । फ़ाइल डेटा के स्थायी संग्रहण के लिए बनाई गई है यह एक तैयार की गई संरचना है। सी भाषा में, हम एक फ़ाइल घोषित करने के लिए फ़ाइल प्रकार के एक संरचना सूचक का उपयोग करते हैं। सी कई फ़ंक्शंस प्रदान करता है जो मूल फ़ाइल संचालन को करने में मदद करता है। निम्नलिखित कार्य हैं, एक नई फ़ाइल बनाते हैं या एक मौजूदा फ़ाइल खोलते हैं एक फ़ाइल से एक वर्ण पढ़ता है एक फ़ाइल के लिए एक अक्षर लिखता है एक फ़ाइल से डेटा का एक सेट पढ़ता है एक फ़ाइल के डेटा का एक डेटा लिखता है एक फ़ाइल से एक पूर्णांक पढ़ता लिखता है पूर्णांक फ़ाइल को पूर्ण करने की स्थिति निर्धारित करने की स्थिति को निर्धारित करता है फ़ाइल में वर्तमान स्थिति को चालू बिंदु पर स्थिति सेट करना एक फ़ाइल खोलना या फ़ाइल बनाना Fopen () फ़ंक्शन का उपयोग किसी नई फ़ाइल बनाने या मौजूदा फ़ाइल को खोलने के लिए किया जाता है यहां फ़ाइल नाम खोला जाने वाला फ़ाइल का नाम है और मोड फ़ाइल खोलने के उद्देश्य को निर्दिष्ट करता है। मोड निम्न प्रकारों का हो सकता है, एफपी फाइल पॉइंटर (फाइल एफपी) है, जो खुले (या बनाई गई) फाइल के संदर्भ में रखेगी। रीडिंग मोड में एक टेक्स्ट फ़ाइल खुलती है या लेखन मोड में एक टेक्स्ट फ़ाइल बनाते हैं। एडीएण्ड मोड में टेक्स्ट फ़ाइल खुलता है रीडिंग और पिक्चर मोड दोनों में एक टेक्स्ट फाइल को खोलता है रीडिंग और पिक्चर मोड दोनों में एक टेक्स्ट फाइल को खोलता है रीडिंग और लिखित मोड दोनों में टेक्स्ट फाइल को खोलता है रीडिंग मोड में बाइनरी फाइल को खोलता है या एक बायनेरी फ़ाइल खोलता है लिखित मोड में एन्डेड मोड में बाइनरी फाइल खुलती है रीडिंग और लेखन मोड दोनों में बाइनरी फाइल को खोलता है रीडिंग और लेखन मोड दोनों में एक बाइनरी फाइल को खोलता है दोनों को पढ़ने और लिखने के तरीके में बाइनरी फ़ाइल को खोलता है एक फाइल को बंद करना fclose () फ़ंक्शन का उपयोग किया जाता है पहले से ही खोले गए फ़ाइल को बंद करने के लिए यहां फ़ाइल बंद करने में कोई त्रुटि है, तो fclose () फ़ंक्शन फ़ाइल को बंद कर देता है और सफलता पर शून्य देता है, या ईओएफ। यह EOF हेडर फ़ाइल stdio. h में एक निरंतर परिभाषित है। फ़ाइल पर इनपुट आउटपुट ऑपरेशन उपरोक्त तालिका में हमने फाइल पर पढ़ने और लिखने के लिए विभिन्न फाइल IO कार्यों के बारे में चर्चा की है। getc () और putc () एक फ़ाइल में अलग-अलग वर्णों को पढ़ने और लिखने के लिए उपयोग किए जाने वाले सरल कार्य हैं। Fprintf () और fscanf () का उपयोग कर फ़ाइल से पढ़ना और लिखना इस कार्यक्रम में, हमने दो फ़ाइल पॉइंटर्स बनाये हैं और दोनों एक ही फाइल में संदर्भित हैं, लेकिन विभिन्न तरीकों में। fprinf () फ़ंक्शन सीधे फ़ाइल में लिखते हैं, जबकि fscanf () फ़ाइल से पढ़ता है, जो फिर यूएसआईएन मानक मानक printf () फ़ंक्शन पर मुद्रित किया जा सकता है। जोड़ना और लिखें मोड के बीच का अंतर लिखना (डब्ल्यू) मोड और अपेंड (ए) मोड, फ़ाइल खोलते समय लगभग समान होते हैं। दोनों एक फाइल में लिखने के लिए उपयोग किया जाता है दोनों विधियों में, नई फ़ाइल बनाई जाती है अगर यह पहले से ही मौजूद नहीं है उनके पास एकमात्र अंतर है, जब आप लेखन मोड में एक फ़ाइल खोलते हैं, फ़ाइल रीसेट होती है, जिसके परिणामस्वरूप फ़ाइल में पहले से मौजूद किसी भी डेटा को हटाया जा सकता है। एपेंड मोड में होने पर ऐसा नहीं होगा परिशिष्ट मोड का उपयोग फाइल के मौजूदा डेटा में जोड़ने या जोड़ने के लिए किया जाता है (यदि कोई है)। इसलिए, जब आप एक फाइल को ऐप्ड (ए) मोड में खोलते हैं, तो कर्सर फाइल में मौजूद डेटा के अंत में स्थित होता है। बाइनरी फ़ाइल में पढ़ना और लिखना एक बाइनरी फ़ाइल टेक्स्ट फ़ाइल के समान है, लेकिन इसमें केवल बड़े संख्यात्मक डेटा शामिल हैं उद्घाटन मोड का उपयोग ऊपर के तरीके खोलने के लिए तालिका में किया गया है। fread () और फ़्रेम () फ़ंक्शंस को पढ़ने और लिखने के लिए उपयोग किया जाता है एक बाइनरी फ़ाइल है fread () फ़ंक्शन जैसे ही तर्कों के साथ, फ़्रेड () का भी उसी तरह प्रयोग किया जाता है। नीचे वर्णित एक द्विपदीय फाइल, fseek (), ftell () और रिवाइंड () फ़ंक्शंस () को लिखने का एक सरल उदाहरण है - यह रीडिंग कंट्रोल को फ़ेसीक फ़ंक्शन का उपयोग करके विभिन्न पदों पर ले जाने के लिए उपयोग किया जाता है। ftell () - यह फ़ाइल सूचक में कर्सर की वर्तमान स्थिति के बाइट स्थान को बताता है। रिवाइंड () - यह फ़ाइल की शुरुआत में नियंत्रण को स्थानांतरित करता है। कुछ फ़ाइल हैंडलिंग प्रोग्राम उदाहरण

No comments:

Post a Comment