如何通过 C 或 C++ API 获得 HDF5 数据集的名称?

Mar*_*ata 3 c++ hdf5

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

理想情况下,我想这样做:

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

我知道h5dump可以做到,但是简单看一下代码,它只能通过使用 遍历树来知道它H5Giterate,即只有父母知道孩子的名字,而孩子不知道自己的名字。

Mar*_*ata 6

这是基于西蒙的帖子的部分答案。请注意,名称是完整的分层名称,

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;
}
Run Code Online (Sandbox Code Playgroud)

示例名称

"/toplevel/videodata"
Run Code Online (Sandbox Code Playgroud)