ฉันจะอ่านไฟล์ลงใน a ได้std::stringอย่างไรเช่นอ่านไฟล์ทั้งหมดในครั้งเดียว?
ข้อความหรือโหมดไบนารีควรถูกระบุโดยผู้เรียก การแก้ปัญหาควรเป็นไปตามมาตรฐานพกพาและมีประสิทธิภาพ ไม่ควรคัดลอกข้อมูลของสตริงโดยไม่จำเป็นและควรหลีกเลี่ยงการจัดสรรหน่วยความจำใหม่ขณะอ่านสตริง
วิธีหนึ่งที่จะทำเช่นนี้จะ stat ขนาดไฟล์ที่ปรับขนาดstd::stringและfread()เข้าไปในstd::string's 'const_cast<char*>() เอ็ด data()สิ่งนี้ต้องใช้std::stringข้อมูลของต่อเนื่องซึ่งไม่จำเป็นต้องใช้ตามมาตรฐาน แต่ดูเหมือนจะเป็นกรณีสำหรับการใช้งานที่รู้จักทั้งหมด ถ้าไฟล์อ่านในโหมดข้อความstd::stringขนาดของไฟล์อาจไม่เท่ากับขนาดของไฟล์
ถูกต้องอย่างเต็มที่แก้ตามมาตรฐานและแบบพกพาอาจจะสร้างขึ้นโดยใช้std::ifstream's rdbuf()เป็นและจากที่นั่นเป็นstd::ostringstream std::stringอย่างไรก็ตามสิ่งนี้สามารถคัดลอกข้อมูลสตริงและ / หรือจัดสรรหน่วยความจำโดยไม่จำเป็น
- การใช้งานไลบรารีมาตรฐานที่เกี่ยวข้องทั้งหมดนั้นฉลาดพอที่จะหลีกเลี่ยงค่าใช้จ่ายที่ไม่จำเป็นทั้งหมดได้หรือไม่?
- มีวิธีอื่นที่จะทำหรือไม่
- ฉันพลาดฟังก์ชั่น Boost ที่ซ่อนอยู่ซึ่งมีฟังก์ชั่นที่ต้องการอยู่แล้วหรือไม่?
void slurp(std::string& data, bool is_binary)
rdbuf(คำตอบที่ยอมรับได้) ไม่ใช่วิธีที่เร็วที่สุดreadคือ