【问题标题】:Get hid_t and path-in-file of H5::DataSet to use H5OCopy获取 H5::DataSet 的 hid_t 和 path-in-file 以使用 H5OCopy
【发布时间】:2020-05-02 07:07:50
【问题描述】:

我在 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


    【解决方案1】:

    如果这适合您,请查看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 reference manual

    【讨论】:

    • 首先,源 H5File 不是 file,因为使用自定义 VFL,其次,正如问题所提到的,我没有源数据集的名称/路径,所以我不太确定这会有什么帮助。使用 H5Ocopy 很简单,如果/当你有正确的论点,而你的建议似乎没有帮助,考虑到我已经问过的问题。在 HDF5 之上引入 DSL 只会减慢恕我直言,除非我遗漏了什么。不过感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 2015-02-22
    • 2021-02-10
    • 1970-01-01
    • 2019-04-22
    • 2021-11-10
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多