我对大多数 C++ 都非常熟悉,但我避免的一个领域是 IO 流,主要是因为我一直在不适合的嵌入式系统上使用它。然而,最近我不得不熟悉它们,并且我正在努力找出我认为应该简单的东西。
我正在寻找一种相对有效的方法来将固定数量的字符从 C++ 流读取到std::string
. 我可以使用该方法轻松地读入一个临时char
数组read()
并将其转换为 a std::string
,但这相当难看并且涉及浪费的副本。我还可以将整个流读入一个字符串,如下所示:
std::string getFile(std::fstream &inFile)
{
std::stringstream buffer;
buffer << inFile.rdbuf();
return buffer.str();
}
...但是无限制地读取内存通常不是一个好主意,所以我真的很想一次访问一个文件块,比如 4K 左右。我也可以一次读取字符,但这感觉比读取临时char
数组更丑陋且效率更低。
那么,有没有一种简单的方法可以std::string
直接从包含流中接下来的N个字符的流中获取 a?很可能根本没有办法做到这一点,但对我来说,这样的事情会丢失似乎很奇怪,所以我觉得我一定错过了一些明显的东西。
顺便说一句,我对 C 文件 IO API 非常熟悉,我并不是在寻找涉及它们的解决方案。read()
我可以用and敲一些东西write()
,但是我正在使用的代码大量使用流,我认为让我的代码添加保持一致的风格是一种很好的做法。