所以,这是我的问题:我想创建一个从文件中读取数据块的程序.比方说,每个块有1024个字节.所以我读取了前1024个字节,执行各种操作,然后打开下一个1024字节,而不读取旧数据.该程序应该保持读取数据不会达到EOF.
我目前正在使用此代码:
std::fstream fin("C:\\file.txt");
vector<char> buffer (1024,0); //reads only the first 1024 bytes
fin.read(&buffer[0], buffer.size());
Run Code Online (Sandbox Code Playgroud)
但是如何读取下一个1024字节?我正在考虑使用for循环,但我真的不知道如何.我完全是C++中的菜鸟,所以如果有人能帮助我,那就太棒了.谢谢!
你可以用循环来做到这一点:
std::ifstream fin("C:\\file.txt", std::ifstream::binary);
std::vector<char> buffer (1024,0); //reads only the first 1024 bytes
while(fin.read(buffer.data(), buffer.size())) {
std::streamsize s=fin.gcount();
///do with buffer
}
Run Code Online (Sandbox Code Playgroud)
http://en.cppreference.com/w/cpp/io/basic_istream/read
接受的答案对我不起作用-它不会读取最后的部分块。这样做:
void readFile(std::istream &input, UncompressedHandler &handler) {
std::vector<char> buffer (1024,0); //reads only 1024 bytes at a time
while (!input.eof()) {
input.read(buffer.data(), buffer.size());
std::streamsize dataSize = input.gcount();
handler({buffer.begin(), buffer.begin() + dataSize});
}
}
Run Code Online (Sandbox Code Playgroud)
这里UncompressedHandler接受std :: string,所以我使用来自两个迭代器的构造函数。