大文本文件处理错误

时间:2014-09-15 08:04:48

标签: c++

大家。

对于大文本文件,不执行如下所示的程序,例如,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;
}

1 个答案:

答案 0 :(得分:1)

确保文件输入/输出库支持大文件。您可以阅读文档。还要检查搜索操作中文件位置参数的大小。为了支持大文件,它必须是64位,而不是32.在MS Visual C ++中,标准的iostream似乎不支持大文件。但是你可以使用其他低级输入/输出函数:_sopen_s,_read,_close,_lseeki64等。在gcc和mingw中,你可以使用函数:_sopen,read,close,lseek。