gpt4 book ai didi

c++ - ifstream 没有完全读取整个数据

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:07 25 4
gpt4 key购买 nike

我正在尝试逐 block 读取文件。 block 大小为 64Byte。但是还剩下一些字节。

示例:我有一个 360 字节的文件并以 64 字节的 block 读取数据,所以我需要 6 次 64 字节的 block 来获取所有数据。

typedef unsigned char uint1;

ifstream is(path.c_str(), ifstream::in | ifstream::binary);
uint1 data[64];
int i = 0;

while (is.read((char*)data, 64)) {
i++;
}

cout << i << endl;

但我只得到 5 次完全填充的 64 字节 block 。如何获取剩余的Bytes??

最佳答案

我想问题是你的文件大小不能被缓冲区大小整除,所以最后一个 block 的大小小于 64(360 - 64 * 5 = 40 字节)。对于此案例文档 istream::read说:

If the input sequence runs out of characters to extract (i.e., the end-of-file is reached) before n characters have been successfully read, the array pointed to by s contains all the characters read until that point, and both the eofbit and failbit flags are set for the stream.

因此,last is.read 的返回值被评估为“false”,并且它不被您的计数器计算在内。

关于c++ - ifstream 没有完全读取整个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com