PCL存储点云错误pcl::IOException what() [pcl::PCDWriter::writeASCII] Could not open file for writing

关于PCL写入/读取点云的报错:

写入:

1 点云指针为空。

最好在写入前面加一个判断,只有当指针不为空时才执行写入到点云的操作,即:

if (!cloud->points.empty())
{
    pcl::PCDWriter writer;
    writer.write<pcl::PointXYZ> ("cloud.pcd", *cloud, false);
}

2 文件路径不存在。

一般保存时写的相对路径,是相对于可执行文件的位置而言的。即如果直接保存,则文件存放在和可执行文件相同的位置,如果你写的保存路径下有子文件夹,则会在可执行文件的位置搜索这个文件夹,如果有,则保存;如果没有,则报错。(有时候好像不会报错,也没有这个文件。)

这样一来,最好在程序开头检查一下有没有这个文件夹,如果没有,则创建之。

DIR *dir;
if ((dir = opendir("/home/aemc/catkin_ws/devel/lib/rvv/out/")) == NULL)
{
    system("mkdir -p /home/aemc/catkin_ws/devel/lib/rvv/out/"); //system( s.c_str() );
}

上述代码我在ubuntu下编译没有错,如果是windows系统,需要加一个函数来把你写的路径转换成字符串。

DIR *dir;
if ((dir = opendir("/home/aemc/catkin_ws/devel/lib/rvv/out/".c_str())) == NULL)
{
    system("mkdir -p /home/aemc/catkin_ws/devel/lib/rvv/out/");
}

3 没有写入权限。

不妨在开头先试一下能不能写入文件。

FILE* tempFile = fopen("test.txt", "w+");
if (tempFile == nullptr)
{
    cout << "没有写入权限!"<< endl;
    return -1;
}
fclose(tempFile);
remove("test.txt");

4 绝对路径与相对路径。

这个坑过我一次。代码中所有涉及到路径的问题,要么全部写成相对路径(就是前面说的相对于可执行文件的路径);要么全部写成绝对路径。千万不要绝对路径和相对路径混杂着写。我按照上述方法仔仔细细检查了一下午代码,最后发现代码结尾处我输出了一组点云,路径的书写方式不一样。

LINUX系统怎么看绝对路径?选中你要查看的文件,右键-properties属性,在弹出的属性菜单的首页即可看到。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值