Sta*_*tan 11 c++ vector ifstream
我有二进制文件,其内容我试图读入一个向量.所有文件都是相同的大小,但使用下面的代码,最终的矢量大小总是比文件大小小一点,并且它与文件不同(但每个文件都相同).我对这里发生的事感到困惑......
#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;
}
Run Code Online (Sandbox Code Playgroud)
在文件上尝试这个,我得到这个:
Detected foo_binary.bin size: 2113753
Loaded data from foo_binary.bin, with 2099650 elements
Run Code Online (Sandbox Code Playgroud)
2113753编号是文件的正确大小(以字节为单位).
在另一个相同大小的文件上尝试这个,矢量大小最终会有2100700个元素.多一点,但不是整个文件.
这里发生了什么?
Die*_*ühl 14
有多个流迭代器.类模板std::istream_iterator<T>用于格式化输入,即,在尝试读取类型对象之前,它将跳过前导空格T.
从它的外观你想要std::istreambuf_iterator<char>用于迭代文件中的字符,而不是任何跳过.
| 归档时间: |
|
| 查看次数: |
879 次 |
| 最近记录: |