我目前正在使用c ++进行I / O操作,我遇到了以一定大小(如1024字节)的块读取和/或写入数据的方法,而不是一次整个文件。现在我脑子里有一些关于这个概念的问题:
想象一下这样的结构配置文件:
[Engine]
bloom = true
AA = 16
[Keys]
jump = SPACE
quit = ESCAPE
现在我读到的一个块包含这个:
[Engine]
bloom = true
AA = 16
[Keys]
jump = SP
所以我的块不够大,无法完全存储最后一行。如果我现在将此块与我的配置读取器类一起使用,它将检测到该行,但是值不正确。 如何确保正确处理? 也许我在这里完全错误的道路,但我希望得到一些澄清。
答案 0 :(得分:1)
您认为这是您可以做出的某种选择,但事实并非如此:文件数据始终以块的形式读取。唯一的问题是在哪个层的抽象层是连接成单个输出的块,供业务逻辑使用?是在你的用户空间"代码或隐藏在标准库函数后面?因此,你的大部分问题都没有实际意义。
但是,如果 可以使用标准库函数隐藏该逻辑,那么它会为您节省一些手持代码。
比较一下:
#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>());