所以,我的问题是:我想制作一个从文件中读取大块数据的程序。比方说,每块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());但是如何读取下一个1024字节呢?我正在考虑使用for循环,但我不知道怎么做。我在C++完全是个菜鸟,所以如果有人能帮我,那就太好了。谢谢!
发布于 2014-01-03 19:52:36
您可以使用一个循环来完成这个任务:
std::ifstream fin("C:\\file.txt", std::ifstream::binary);
std::vector<char> buffer (1024,0); //reads only the first 1024 bytes
while(!fin.eof()) {
fin.read(buffer.data(), buffer.size())
std::streamsize s=fin.gcount();
///do with buffer
}##EDITED
istream/read
发布于 2018-10-12 11:59:30
接受的答案对我不管用--它不会读到最后的部分。这确实是:
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});
}
}这里,UncompressedHandler接受std::string,所以我使用来自两个迭代器的构造函数。
发布于 2014-01-03 20:05:33
我认为您忽略了有一个指针指向您在文件中访问的最后一个位置,所以当您第二次阅读时,您将不会从第一次开始,而是从访问的最后一点开始。看看这段代码
std::ifstream fin("C:\\file.txt");
char buffer[1024]; //I prefer array more than vector for such implementation
fin.read(buffer,sizeof(buffer));//first read get the first 1024 byte
fin.read(buffer,sizeof(buffer));//second read get the second 1024 byte所以你可以如何看待这个概念。
https://stackoverflow.com/questions/20911584
复制相似问题