大家。
对于大文本文件,不执行如下所示的程序,例如,30GB。
该程序仅用于转换文本文件格式。
让我知道如何解决这个问题。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include </usr/include/pcl-1.7/pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main (int argc, char** argv)
{
int r,g,b;
if(argc!=3)
{
fprintf(stderr,"Usage:%s\n(1)Input_XYZRGB_filename\n(2)Output_PCD_filename\n",argv[0]);
exit(1);
}
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGB>);
std::ifstream ifs(argv[1]);
std::string buf;
for(size_t i=0; ifs && getline(ifs, buf); i++)
{
// std::cout << buf << std::endl;
std::istringstream is(buf);
pcl::PointXYZRGB pnt;
is >> pnt.x
>> pnt.y
>> pnt.z
>> r
>> g
>> b;
pnt.r= (uint8_t)r;
pnt.g= (uint8_t)g;
pnt.b= (uint8_t)b;
cloud->push_back ( pnt );
}
pcl::io::savePCDFileASCII(argv[2], *cloud);
return 0;
}
答案 0 :(得分:1)
确保文件输入/输出库支持大文件。您可以阅读文档。还要检查搜索操作中文件位置参数的大小。为了支持大文件,它必须是64位,而不是32.在MS Visual C ++中,标准的iostream似乎不支持大文件。但是你可以使用其他低级输入/输出函数:_sopen_s,_read,_close,_lseeki64等。在gcc和mingw中,你可以使用函数:_sopen,read,close,lseek。