如何通过C或C ++ API获取HDF5 DataSet的名称?

时间:2014-04-01 23:18:55

标签: c++ hdf5

我试图使用C ++ API读取HDF5 DataSet的名称。对于H5::Attribute个对象,有一个getName()方法。但是,我没有为getName()个对象看到类似的H5:DataSet方法。

理想情况下我想这样做:

 void Dump(H5::DataSet& ds)
 {
    cout << "Dataset " << ds.getName() << endl;
    // continue to print dataset values
 }

我知道h5dump可以做到这一点,但是简单地查看代码,它只能通过使用H5Giterate走树来知道它,只有父亲知道孩子的名字,但是孩子们不知道自己的名字。

2 个答案:

答案 0 :(得分:4)

根据Simon的帖子,这是一个部分答案。请注意,该名称是完整的分层名称,

std::string getName(const H5::DataSet& ds)
{
    size_t len = H5Iget_name(ds.getId(),NULL,0);
    char buffer[len];
    H5Iget_name(ds.getId(),buffer,len+1);
    std::string n = buffer;
    return n;
}

示例名称

"/toplevel/videodata"

答案 1 :(得分:2)

在C中,有H5Iget_name。我无法在C ++中找到等价物,但您可以使用DataSet::getId()并将其赋予C函数。

我想这并不像在getName()中拥有DataSet访问器那么简单的原因是要读取数据集,您需要知道它的名字或走树。我能想到的唯一例外是取消引用对数据集的引用。