2010-10-29 23 views
6

विंडोज प्रोग्रामिंग के महान आनंदों में से एक है 'wb' या 'rb' या ios :: बाइनरी को सभी फ़ाइल ओपन कॉल में रखना याद रखना ताकि विंडोज़ नहीं करता अपने सभी 0x13s को आसानी से रूपांतरित करें।क्यों Createfile() में बाइनरी ध्वज नहीं है

मुझे केवल एक निश्चित ध्वज प्राप्त करने के लिए Createfile() का उपयोग करने के लिए अच्छी तरह से मानक कोड का एक गुच्छा परिवर्तित करना पड़ा - और यह मेरे लिए हुआ कि बाइनरी निर्दिष्ट करने का कोई तरीका नहीं है।
यह कैसे पता चलता है? मैं वास्तव में नहीं चाहता कि यह मेरे एमपी 4 स्ट्रीम में बाइट्स को बदल रहा है, धन्यवाद-बहुत-बहुत।

+0

मैं सिर्फ प्रश्न को समझ नहीं पा रहा हूं। फाइलें बाइनरी मोड में खोली गई हैं, इसलिए कोई सीआर \ एलएफ नहीं बदला जाता है। – ruslik

+0

यह नहीं पता था कि यह हमेशा बाइनरी मोड में खोला जाता है। चूंकि बाइनरी मोड एक विंडो सोनी की सुविधा है और CreateFile विंडोज़ का केवल एक संस्करण है, यह तार्किक लग रहा था कि यह विंडोज़ केवल फ़ंक्शन करेगा - या कम से कम दस्तावेज़ों में इसका उल्लेख करें –

+0

टेक्स्ट मोड केवल विंडोज़ की सुविधा नहीं है: इसकी आवश्यकता है किसी भी मशीन पर जो लाइनों को समाप्त करने के लिए एक एलएफ का उपयोग नहीं करती है। प्री-एक्स मैक उदाहरण के लिए, और मैंने सुना है कि VAX पर कुछ फ़ाइल प्रकारों को पंक्तियों का प्रतिनिधित्व करने वाली पंक्तियों के साथ एक तालिका के रूप में अधिक माना जाता है, और पूरी चीज "टेक्स्ट" फ़ाइलों से बहुत अलग रूप से संग्रहीत होती है - लेकिन डीबी- उपयोग की तरह –

उत्तर

8

क्योंकि CreateFile "टेक्स्ट-मोड"/न्यूलाइन रूपांतरण नहीं करता है। उनको उच्च स्तर पर संभाला जाता है, या तो सीआरटी के लिए FILE में या सी ++ के लिए iostreams।

+0

कभी भी कम स्तर वाली फ़ाइल के रूप में Createfile के बारे में कभी नहीं सोचा, बस एक खिड़कियों के बराबर। मुझे लगता है कि एमएस सबकुछ विंडोज है इसलिए आप सीआर/एलएफ लिखते हैं और सीआर/एलएफ पढ़ते हैं, कभी भी कनवर्ट करने की आवश्यकता नहीं होती है। –

+0

@ मार्टिन बेकेट: असल में, 'CreateFile() 'फ़ंक्शन का नाम खराब है। इसका उपयोग कई अन्य प्रकार के संसाधनों (फ़ोल्डर्स, ड्राइव, सीरियल/समांतर बंदरगाहों, आदि) को खोलने के लिए किया जाता है, जिनमें से अधिकांश टेक्स्ट/बाइनरी समझ में नहीं आता है क्योंकि आप टेक्स्ट स्थानांतरित नहीं कर रहे हैं। –

+1

CreateFile ZwCreateFile कर्नेल फ़ंक्शन के लिए उपयोगकर्ता-मोड इंटरफ़ेस है, इसलिए यह निम्न-स्तर के रूप में है क्योंकि आप उपयोगकर्ता-मोड में प्राप्त कर सकते हैं। – Gerald

1

आप विंडोज ओएस के कारण बाइनरी या टेक्स्ट फ्लैग निर्दिष्ट नहीं कर सकते हैं, सभी फाइलें बाइनरी हैं! सीओओ और आरबी विकल्पों को सी आईओ स्ट्रीम कार्यक्षमता के हिस्से के रूप में, और फिर भी केवल डॉस/विंडोज पर, डेवलपर को पाठ फ़ाइलों को पढ़ने और लिखने और एलएफ रूपांतरण में सीआर/एलएफ करने में मदद करने के लिए एक अच्छी तरह से पेश किया जाता है।

6

विंडोज एपीआई के संबंध में सबकुछ द्विआधारी है। व्यक्तिगत रूप से मैं इसे इस तरह से पसंद करता हूं। मैं मानक लाइब्रेरी सामान में कभी भी "टेक्स्ट मोड" का उपयोग नहीं करता हूं।

+0

+1: मैं पूरी तरह से सहमत हूं। विशेष रूप से कई उच्च स्तरीय उपकरण केवल सीआर/एलएफ फ़िल्टर करते हैं जब उन्हें पता है कि आप टेक्स्ट पढ़ रहे हैं। उदाहरण के लिए, 'std :: string' के साथ 'ऑपरेटर >>' का उपयोग करते समय' 'मानक लाइब्रेरी फ़िल्टर तब बाहर निकलते हैं, लेकिन 'get (char *, streamsize)' का उपयोग करते समय नहीं। –

संबंधित मुद्दे