1. 将文件内容读取为string
a.
string readFile2(const string &fileName) { ifstream ifs(fileName.c_str(), ios::in | ios::binary | ios::ate); ifstream::pos_type fileSize = ifs.tellg(); ifs.seekg(0, ios::beg); vector<char> bytes(fileSize); ifs.read(&bytes[0], fileSize); return string(&bytes[0], fileSize); }
b.
#include <iostream> #include <fstream> void slurp(const std::string& filename, std::string& data, bool is_binary) { std::ios_base::openmode openmode = std::ios::ate | std::ios::in; if (is_binary) openmode |= std::ios::binary; std::ifstream file(filename.c_str(), openmode); if (!file.is_open()) { throw "error opening file"; } data.clear(); data.reserve(file.tellg()); // alocate all memory in one go file.seekg(0, std::ios::beg); char buf[1000]; while ( file ) { file.read(buf, 1000); data.append(buf, file.gcount()); } if ( file.bad() ) { // an error occurred while reading throw "error while reading file"; } }