2013-06-10 4 views
7

मुझे fstream ऑब्जेक्ट के एक पहलू का स्पष्ट उत्तर नहीं मिल रहा है यह निर्धारित करने के लिए आवश्यक है कि यह उपयोग करने योग्य है या नहीं। क्या fstream इसकी सामग्री को मेमोरी में संग्रहीत करता है, या यह फ़ाइल में किसी स्थान के पॉइंटर की तरह है? मैं मूल रूप से CFile का उपयोग कर रहा था और पाठ को CString में पढ़ रहा था, लेकिन अगर मैं इससे बच सकता हूं तो मुझे पूरी फाइल मेमोरी में नहीं होगी।fstream कैसे काम करता है? मेमोरी या फाइल?

उत्तर

5

fstreamfile stream के लिए छोटा है - यह आमतौर पर मेजबान ओएस की फ़ाइल सिस्टम में फ़ाइल के साथ एक कनेक्शन है। (§27.9.1.1/1: "। वर्ग basic_filebuf<charT,traits> सहयोगियों दोनों इनपुट अनुक्रम और एक फ़ाइल के साथ उत्पादन अनुक्रम")

यह है (आम तौर पर) है कि फाइल से कुछ जानकारी बफ़र, और यदि आप काम करने के लिए हो एक छोटी फ़ाइल के साथ, यह सब बफर में फिट हो सकता है। एक सामान्य मामले में, हालांकि, अधिकांश डेटा डिस्क पर फ़ाइल (या कम से कम ओएस के फ़ाइल कैश में) में होगा, जिसमें कुछ अपेक्षाकृत छोटे हिस्से (आमतौर पर कुछ किलोबाइट्स) fstream के बफर में होंगे।

आप स्मृति में एक बफर का उपयोग करना चाहते हैं और यह एक फ़ाइल की तरह काम किया है, तो आप सामान्य रूप से उपयोग करना चाहते हैं एक std::stringstream (या std::istringstream या std::ostringstream की तरह एक प्रकार)।

+0

तो 'स्ट्रिंगस्ट्रीम' वास्तव में बड़ी टेक्स्ट फ़ाइल को संभालने के लिए बेहतर होगा जो मैं रेखा से लाइन को पार्स करना चाहता था? –

+0

देखें [std :: getline] (http://en.cppreference.com/w/cpp/string/basic_string/getline)। – Casey

+1

@ जोमाजस्टर्स्की: नहीं, शायद नहीं। एक स्ट्रिंगस्ट्रीम आमतौर पर प्रदर्शित करने से पहले प्रारूप डेटा को अस्थायी बफर के रूप में उपयोग किया जाता है, या फ़ाइल से एक समय में एक पंक्ति को पढ़ने के लिए, फिर लाइन के टुकड़ों को पार्स करने के लिए 'स्ट्रिंगस्ट्रीम' का उपयोग करें। –

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