c – 将二进制文件读入小于完整文件的向量读取
发布时间:2020-12-16 05:49:48 所属栏目:百科 来源:网络整理
导读:我有二进制文件,其内容我想读入一个向量.所有文件的大小相同,但是使用下面的代码,最终的矢量大小总是比文件大小小一点,并且它与文件的不同(对于每个文件都是一样的).我对这里发生的事情感到困惑 #include fstream#include vector#include iostream#include i
我有二进制文件,其内容我想读入一个向量.所有文件的大小相同,但是使用下面的代码,最终的矢量大小总是比文件大小小一点,并且它与文件的不同(对于每个文件都是一样的).我对这里发生的事情感到困惑
#include <fstream> #include <vector> #include <iostream> #include <iterator> int main(int argc,char *argv[]) { std::string filename(argv[1]); // Get file size std::ifstream ifs(filename,std::ios::binary | std::ios::ate); int size = (int)ifs.tellg(); std::cout << "Detected " << filename << " size: " << size << std::endl; // seems correct! // Load file ifs.seekg(0,std::ios::beg); std::istream_iterator<char unsigned> start(ifs),end; std::vector<char unsigned> v; v.reserve(size); v.assign(start,end); std::cout << "Loaded data from " << filename << ",with " << v.size() << " elements" << std::endl; } 尝试这个文件,我得到这个: Detected foo_binary.bin size: 2113753 Loaded data from foo_binary.bin,with 2099650 elements 2113753数字是文件的正确大小(以字节为单位). 尝试这个相同大??小的另一个文件,矢量大小将最终拥有2100700个元素.多一点,但不是整个文件. 这里发生了什么? 解决方法
有多个流迭代器.类模板std :: istream_iterator< T>是用于格式化的输入,即在尝试读取类型T的对象之前,它将跳过前导空格
从它的外观,你想要std :: istreambuf_iterator< char>它用于遍历文件中的字符,不执行任何跳过. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |