我目前全都从事c ++的I / O操作,遇到了一种以一定大小(例如1024Bytes)的块而不是一次整个文件读取和/或写入数据的方法。现在,我对这个概念有一些疑问:
想象一个配置文件,其结构如下:
[Engine]
bloom = true
AA = 16
[Keys]
jump = SPACE
quit = ESCAPE
现在,我阅读的一个代码块包含以下内容:
[Engine]
bloom = true
AA = 16
[Keys]
jump = SP
因此,我的块不足以完全存储最后一行。如果现在在配置读取器类中使用此块,它将检测到该行,但值错误。如何确保正确处理?也许我在这里走的是完全错误的道路,但我希望您澄清一下。
您认为这是您可以选择的一种选择,但事实并非如此:文件数据始终按块读取。唯一的问题是,这些块在哪一层的抽象层连接到一个输出中,以供您的业务逻辑使用?是在您的“用户空间”代码中还是隐藏在标准库函数的后面?因此,您的大部分问题都没有定论。
但是,如果您可以通过使用标准库函数使该逻辑隐藏起来,则可以节省一些手持代码。
比较一下:
#include <string>
#include <fstream>
std::string readFromStream(std::istream& is)
{
std::string result;
char x;
while (is.get(x))
str += x;
return result;
}
std::ifstream t("file.txt");
std::string str = readFromStream(t);
(或读取1024个字节的块的等效文件-逻辑将基本相同),其方法如下:
#include <string>
#include <fstream>
#include <streambuf>
std::ifstream t("file.txt");
std::string str((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句