首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取多块文件直到EOF (C++)

如何读取多块文件直到EOF (C++)
EN

Stack Overflow用户
提问于 2014-01-03 19:48:53
回答 4查看 27.5K关注 0票数 13

所以,我的问题是:我想制作一个从文件中读取大块数据的程序。比方说,每块1024字节。因此,我读取前1024字节,执行各种操作,然后打开下一个1024字节,而不读取旧数据。程序应继续读取数据,直到达到EOF为止。

我目前正在使用以下代码:

代码语言:javascript
复制
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++完全是个菜鸟,所以如果有人能帮我,那就太好了。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-03 19:52:36

您可以使用一个循环来完成这个任务:

代码语言:javascript
复制
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

票数 20
EN

Stack Overflow用户

发布于 2018-10-12 11:59:30

接受的答案对我不管用--它不会读到最后的部分。这确实是:

代码语言:javascript
复制
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,所以我使用来自两个迭代器的构造函数。

票数 10
EN

Stack Overflow用户

发布于 2014-01-03 20:05:33

我认为您忽略了有一个指针指向您在文件中访问的最后一个位置,所以当您第二次阅读时,您将不会从第一次开始,而是从访问的最后一点开始。看看这段代码

代码语言:javascript
复制
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

所以你可以如何看待这个概念。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20911584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档