我正在尝试为 C++ 模仿 PHP 的 file_get_contents() 函数。
但是,当我将 char 数组转换为字符串时,它会在 nullbyte 处停止:
fread(charbuf, 1, file_size, fp);
string str(charbuf);
如何将字符串初始化为静态大小数组,并将文件内容直接读取到该容器?另外,我如何检查它的错误,例如,如果没有足够的内存来初始化该字符串。这也将使我摆脱我目前正在使用的临时内存分配,我想摆脱它。
安全性如何?是否有可能许多进程同时读取同一个文件和/或其中一个进程在我读取它时同时写入它?我该如何避免此类事情发生?
我希望您可以回答“字符串不是二进制容器”以外的其他方式。
我要求重新提出这个问题: “显然,这个问题与以往一样重要:两年后,两个最有效的解决方案仍然将整个文件内容复制到内存中,并且优化器无法删除这个副本。这个是一种非常不令人满意的事态。--Konrad Rudolph 2010 年 10 月 25 日在 6:25"在将整个文件读入 C++ 中的 std::string 的最佳方法是什么?或者你想让我创建一个新问题,要求在没有额外的字符串副本的情况下读取文件?