【发布时间】:2013-07-03 13:32:50
【问题描述】:
我有一个包含数百万行的 txt 文件,每行有 3 个浮点数,我使用以下代码读取它:
ifstream file(path)
float x,y,z;
while(!file.eof())
file >> x >> y >> z;
我工作得很好。
现在我想尝试使用 Boost 映射文件做同样的事情,所以我执行以下操作
string filename = "C:\\myfile.txt";
file_mapping mapping(filename.c_str(), read_only);
mapped_region mapped_rgn(mapping, read_only);
char* const mmaped_data = static_cast<char*>(mapped_rgn.get_address());
streamsize const mmap_size = mapped_rgn.get_size();
istringstream s;
s.rdbuf()->pubsetbuf(mmaped_data, mmap_size);
while(!s.eof())
mystream >> x >> y >> z;
它编译没有任何问题,但不幸的是 X,Y,Z 没有得到实际的浮点数,而只是垃圾,并且在一次迭代之后,While 结束了。
我可能做错了什么
如何使用和解析内存映射文件中的数据? 我搜索了整个互联网,尤其是堆栈溢出,但找不到任何示例。
我使用的是 Windows 7 64 位。
【问题讨论】:
-
既然你已经在使用 boost,为什么不让它变得简单,使用 boost.iostreams 中的mapped_file_source 呢? (另外,
while(!file.eof())在任何情况下都是错误的) -
我对 boost 很陌生,我应该如何使用它以及如何使用它解析浮点数?
标签: c++ boost memory-mapped-files istringstream