파일을로 읽는 방법 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)