用于读取二进制文件的迭代器

Mik*_*ike 2 c++ iterator

我必须读取一些 8 字节块的二进制文件,然后通过 tcp 套接字发送这些块。我可以使用 C++ 迭代器来完成此任务吗?喜欢:

 FileIterator file("name_file.bin");

for(iter = file.begin(); iter != file.end(); iter++) {
    sendTcp(iter);
}
Run Code Online (Sandbox Code Playgroud)

FileIterator必须返回一些将被发送的结构。在FileIterator我的构造函数中打开二进制文件并读取它。然后我创建动态数组并写入文件的内容。在每个步骤迭代器中,我必须从数组中读取下一个块并将其写入结构中并返回。

Cur*_*519 7

是的你可以!

您可以将 fstream 与 istream_iterator 一起使用,如下所示:

auto f = std::ifstream("lol.bin", std::ios::binary | std::ios::in);
f.exceptions(std::ios::badbit);
for (auto start = std::istream_iterator<char>{ f }, end = std::istream_iterator<char>{}; start != end; ++start)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑: 我没有注意到你要求 8 字节块。解决它的方法是这样的:

首先定义一个运算符>>例如:

struct My8Bytes {
    char bytes[8];
};

std::istream& operator>>(std::istream& s, My8Bytes& bytes) {
    s.read(bytes.bytes, sizeof(bytes.bytes));
    return s;
}
Run Code Online (Sandbox Code Playgroud)

并以与以前相同的方式使用迭代器,只是现在使用您的特定类型:

for (auto start = std::istream_iterator<My8Bytes>{ f }, end = std::istream_iterator<My8Bytes>{}; start != end; ++start)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)