2011-04-06 11 views
9

संभावित डुप्लिकेट:
Is std::ifstream significantly slower than FILE?
Which I/O library do you use in your C++ code?फ़ाइल बनाम fstream

मैं पेशेवरों या सी ++ में फ़ाइल पर fstream का उपयोग करने का विपक्ष क्या हैं सोच रहा था?

एक समर्थक मुझे लगता है कि FILE fstream से अधिक कुशल है।

+1

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

उत्तर

26

एक सी है और एक सी ++ है। टमाटर, टमाटर। (जब आप इसे लिखते हैं तो यह अभिव्यक्ति लगभग भी काम नहीं करती है।) मेरा अनुमान है कि आपको प्रदर्शन अंतर देखने की संभावना नहीं है।

एक बहुत सी ++ झुकाव, एंटी-सी व्यक्ति शायद आपको fstream की लाइनों के साथ कुछ और आसानी से निपटने में सक्षम होने के कारण कुछ बताएगा। FILE के साथ आपके पास दो विकल्प हैं - बाइट्स में सौदा करें या प्रारूप तारों में सौदा करें। चूंकि printf या fwrite et al। पता नहीं है कि उनके तर्कों का "वास्तविक" प्रकार क्या है जिससे यह खराब हो जाता है। यह भी तथ्य है कि एक सी ++ कक्षा में विनाशक होगा और इसलिए जब आप दायरे से बाहर हो जाते हैं तो आपको "मुक्त करने के लिए" साफ़ कर दिया जाता है। (हालांकि ... क्या आप वास्तव में कुछ विनाशक में चुपचाप fflush चाहते हैं? शायद नहीं।) इस तरह के तर्कों के लिए मैं कहूंगा कि यह वास्तव में नहीं हैFILE का उपयोग करने के लिए बहुत अधिक बोझ है, लेकिन हे, कुछ लोग इन मामलों पर मुझसे अधिक दृढ़ता से महसूस करते हैं।

आखिरकार यह आपके आवेदन को वास्तव में करने का प्रयास कर रहा है, और यह FILE, fstream हो सकता है, या दोनों आपकी आवश्यकताओं के अनुरूप पर्याप्त रूप से उपयुक्त हो सकते हैं।

क्या काम करता है, अन्य लोगों के चयन के साथ लचीला रहें, तर्कों को समझें और इसके बारे में बहुत धार्मिक न हों। यह मेरी सलाह है। :-)

+3

+1। :) – acegs

11
  • fstream एक बेहतर encapsulation है और उच्च स्तर की अवधारणाओं है।
  • fstream अपवाद सुरक्षित है।
  • fstream भी एक धारा है और इसे सामान्य रूप से स्ट्रीम के रूप में माना जा सकता है।

कल्पना कीजिए:

शून्य पढ़ा (IStream & ISTR)

हम एक ifstream पास कर सकता है, एक istrstream, या यहाँ तक CIN। यह यूनिट परीक्षण के लिए बहुत उपयोगी है।

2

std::fstream टाइपएफ़ है, अंतर्राष्ट्रीयकरण समर्थन है और (चेतावनी: राय) का उपयोग करना आसान है।

जब std::fstream गुंजाइश से बाहर हो जाता है तो यह आपके लिए नष्ट हो जाता है, भले ही आप fstream::close() भूल गए हों।

+2

मुझे लगता है कि "बंद करना भूलना" तर्क संदिग्ध है। विशेष रूप से "भूल" शब्द का तात्पर्य यह है कि यह आपको सोचने से बचाएगा। ऐसा नहीं है। उदाहरण के लिए यदि आपने बाइट्स बाइट्स को बंद कर दिया है तो एक फ्लश भी हो सकता है, जो असफल हो सकता है। क्या आप एक विनाशक में यह विफलता होना चाहते हैं जहां इसे संभालने में असुविधाजनक हो सकता है? या फिर आप अपने बाकी I/O के साथ एक अनुमानित जगह में होंगे? फ़ाइलें एक अच्छा उदाहरण हैं जहां स्वचालित मेमोरी प्रबंधन टूट जाता है। जीसी के साथ भाषाओं के बारे में इसी तरह के तर्क हो सकते हैं और फाइल को बंद करने के लिए जीसी पर भरोसा क्यों नहीं किया जा सकता है। – asveikau

+2

@asveikau - मैं असहमत नहीं हूं। हालांकि, यह ऐसा कुछ है जिसे FILE और fstream के बीच एक अंतर के रूप में देखा जाना चाहिए ताकि मैंने इसे शामिल किया हो। यह एक समर्थक या con होना पूरी तरह से व्यक्तिपरक है। अंतिम पैराग्राफ के लिए – octal9

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