मैं एक फ़ाइल को एक में कैसे 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
है।