首页 > 解决方案 > 获取 H5::DataSet 的 hid_t 和 path-in-file 以使用 H5OCopy

问题描述

我在 HDF5 上使用 C++ 包装库,并希望下拉到 C API 以有效地将数据集从源 HDF5 文件复制到目标文件中。(在不同的道路上,但这不是重点)。

我可以访问目标的低级 ID 和路径,但对于源,我只有 H5::DataSet C++ 包装器实例,而 H5Ocopy()(参见下面的原型)需要源 HDF5 文件的 hid_t包含数据集及其在该源文件中的路径。

有没有办法从 H5::DataSet 实例中获取丢失的 file-hid_t 和 dataset-path?

直觉上我认为一定有,但到目前为止我还没有找到它们。--DD

PS:从它们已知的角度来看,通过 API 层来显示这些 id/path 将非常困难,因为想要执行 H5OCopy 的代码在时间和空间上非常遥远

H5_DLL herr_t H5Ocopy(
  hid_t src_loc_id, const char *src_name,
  hid_t dst_loc_id, const char *dst_name,
  hid_t ocpypl_id, hid_t lcpl_id
);

标签: c++hdf5

解决方案


如果这对您来说是一个选项,请查看HDFql,因为它可以大大减轻将数据集从一个 HDF5 文件复制到另一个文件的方式。例如,要将一个dset从文件调用的数据集复制one.h5到文件two.h5中,只需使用 HDFql 在 C++ 中执行以下操作:

HDFql::execute("COPY DATASET one.h5 dset TO two.h5 dset");

此外,您可以复制dset到另一个组(从文件two.h5)并给数据集另一个名称,例如:

HDFql::execute("COPY DATASET one.h5 dset TO two.h5 /group/new_dset");

有关更多信息和示例,请查看 HDFql参考手册


推荐阅读