ฉันจะอ่านไฟล์ลงใน 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
คือ