আমি কীভাবে একটি ফাইল পড়ব std::string
, অর্থাৎ পুরো ফাইলটি একবারে পড়তে পারি?
পাঠক বা বাইনারি মোড কলার দ্বারা নির্দিষ্ট করা উচিত। সমাধানটি স্ট্যান্ডার্ড-কমপ্লায়েন্ট, পোর্টেবল এবং দক্ষ হওয়া উচিত। এটি অযথা স্ট্রিংয়ের ডেটা অনুলিপি করা উচিত নয় এবং স্ট্রিংটি পড়ার সময় এটি মেমরির পুনঃব্যবস্থাপনা এড়ানো উচিত।
ওয়ান ওয়ে এই কাজ করতে FILESIZE সূচনা করা, হবে মাপ পরিবর্তন 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
,।