我试图使用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
走树来知道它,只有父亲知道孩子的名字,但是孩子们不知道自己的名字。
答案 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
访问器那么简单的原因是要读取数据集,您需要知道它的名字或走树。我能想到的唯一例外是取消引用对数据集的引用。