在C+中將整個(gè)文件讀入STD:String的最佳方法是什么?如何將文件讀入std::string,即一次閱讀整個(gè)文件?調(diào)用方應(yīng)指定文本或二進(jìn)制模式。該解決方案應(yīng)符合標(biāo)準(zhǔn),便攜和高效。它不應(yīng)該不必要地復(fù)制字符串的數(shù)據(jù),并且應(yīng)該避免在讀取字符串時(shí)重新分配內(nèi)存。這樣做的一種方法是統(tǒng)計(jì)文件大小,調(diào)整std::string和fread()進(jìn)入std::string氏const_cast<char*>()愛(ài)德data()..這需要std::string它的數(shù)據(jù)是連續(xù)的,這是標(biāo)準(zhǔn)所不需要的,但是對(duì)于所有已知的實(shí)現(xiàn)似乎都是如此。更糟糕的是,如果文件是以文本模式讀取的,則std::string其大小可能不等于文件的大小。一個(gè)完全正確、符合標(biāo)準(zhǔn)和可移植的解決方案可以使用std::ifstream氏rdbuf()變成std::ostringstream從那里變成一個(gè)std::string..但是,這可能會(huì)復(fù)制字符串?dāng)?shù)據(jù)和/或不必要地重新分配內(nèi)存。所有相關(guān)的標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)是否都足夠聰明,以避免所有不必要的開銷?還有別的辦法嗎?我是否錯(cuò)過(guò)了一些已經(jīng)提供了所需功能的隱藏的Boost函數(shù)?請(qǐng)給出你的建議如何實(shí)施。void slurp(std::string& data, bool is_binary)考慮到上述討論。
- 3 回答
- 0 關(guān)注
- 1002 瀏覽
添加回答
舉報(bào)
0/150
提交
取消