如何安全地将任何文件读入字符串?

Roo*_*kie -3 c++ string file

可能重复:
在c ++中将文件粘贴到std :: string的最佳方法是什么?

我正在尝试模仿PHP的C++文件_get_contents()函数.

但是,当我将char数组转换为字符串时,它将停止在nullbyte:

fread(charbuf, 1, file_size, fp);
string str(charbuf);
Run Code Online (Sandbox Code Playgroud)

如何将字符串初始化为静态大小数组,并将文件内容直接读取到该容器?另外,如何检查错误,例如,如果没有足够的内存来初始化该字符串.这也可以让我摆脱我目前正在使用的临时内存分配,我想摆脱它.

安全怎么样?是否有可能许多进程同时读取同一个文件和/或其中一个在我阅读时同时写入其中?我该如何避免这种情况发生?

我希望你能回答"字符串不是二进制容器"的其他方式.

我要求重新打开这个问题: "显然,这个问题与以往一样重要:两年后,两个最有效的解决方案仍然将整个文件内容复制到内存中,优化器无法忽略此副本.是一个非常不令人满意的事态. - Konrad Rudolph 2010年10月25日6:25" 在C++中将整个文件读入std :: string的最佳方法是什么?或者您是否希望我创建一个新问题,要求在没有额外字符串副本的情况下读取文件?

Den*_*lin 6

std::ifstream fin("somefile.txt");
std::stringstream buffer;
buffer << fin.rdbuf();
std::string result = buffer.str();
Run Code Online (Sandbox Code Playgroud)

此代码段会将您的所有文件放入std :: string

  • @Rookie:我能理解这种情绪.但是,许多看起来像*正在复制数据的C++结构实际上并没有.(这不是因为C++是愚蠢的,恰恰相反:这是因为C++可以优化其他语言无法做到的一些事情.)优化的第一条规则:测量,优化,测量. (2认同)