मैं एक फ़ाइल को एक में कैसे std::stringपढ़ूं, यानी, एक बार में पूरी फ़ाइल कैसे पढ़ूं?
कॉलर द्वारा पाठ या बाइनरी मोड निर्दिष्ट किया जाना चाहिए। समाधान मानक-अनुपालन, पोर्टेबल और कुशल होना चाहिए। इसे स्ट्रिंग के डेटा को अनावश्यक रूप से कॉपी नहीं करना चाहिए, और इसे स्ट्रिंग को पढ़ते समय मेमोरी के पुनरावृत्तियों से बचना चाहिए।
एक तरह से यह करने के लिए फ़ाइल आकार स्टेट के लिए, हो सकता है आकार बदलने std::stringऔर fread()में std::stringकी const_cast<char*>()'एड data()। इसके लिए आवश्यक है कि std::stringडेटा सन्निहित हो जो मानक द्वारा अपेक्षित नहीं है, लेकिन सभी ज्ञात कार्यान्वयनों के लिए ऐसा प्रतीत होता है। क्या होता है, यदि फ़ाइल पाठ मोड में पढ़ी जाती है, तो std::stringफ़ाइल का आकार फ़ाइल के आकार के बराबर नहीं हो सकता है।
एक पूरी तरह से सही है, मानक अनुरूप और पोर्टेबल समाधान का उपयोग कर निर्माण किया जा सकता है std::ifstreamकी rdbuf()एक में std::ostringstreamऔर एक में वहाँ से std::string। हालांकि, यह स्ट्रिंग डेटा और / या अनावश्यक रूप से वास्तविक मेमोरी को कॉपी कर सकता है।
- सभी प्रासंगिक मानक पुस्तकालय कार्यान्वयन सभी अनावश्यक ओवरहेड से बचने के लिए पर्याप्त स्मार्ट हैं?
- क्या इसे करने का एक और तरीका है?
- क्या मुझे कुछ छिपी बूस्ट फंक्शन याद आए जो पहले से ही वांछित कार्यक्षमता प्रदान करता है?
void slurp(std::string& data, bool is_binary)
rdbuf(स्वीकृत उत्तर में एक) सबसे तेज़ नहीं है, readहै।