【问题标题】:How can one get the name of an HDF5 DataSet through the C or C++ API?如何通过 C 或 C++ API 获取 HDF5 数据集的名称?
【发布时间】:2014-05-12 23:38:56
【问题描述】:

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

理想情况下我想这样做:

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

我知道h5dump可以做到,但是简单看代码,它只有使用H5Giterate走树才知道,也就是只有父母知道孩子的名字,而孩子不知道知道自己的名字。

【问题讨论】:

    标签: c++ hdf5


    【解决方案1】:

    在 C 中,有H5Iget_name。我在 C++ 中找不到等效项,但您可以使用 DataSet::getId() 并将其提供给 C 函数。

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

    【讨论】:

      【解决方案2】:

      这是基于 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"
      

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 2021-02-24
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 2022-10-12
        • 2011-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多