gpt4 book ai didi

c++ - 按照创建顺序读取/写入 HDF5 文件

转载 作者:太空狗 更新时间:2023-10-29 21:21:26 28 4
gpt4 key购买 nike

我正在使用 HDF5 文件对 C++ 类数据进行某种“序列化”。有没有一种方法可以让 HDF5 文件按照创建顺序访问每个数据集?

我选择 HDF5 是因为我需要从我的程序外部访问数据以及能够恢复我的程序状态。

谢谢!

最佳答案

对我来说,能够按照创建数据集的相同顺序遍历组(可能还有其子组)中的数据集就足够了。为此,(如上面所说的 embert)必须使用 H5P_CRT_ORDER_TRACKED | 创建文件中的组。 H5P_CRT_ORDER_INDEXED 标志设置。即调用:

hid_t group_creation_plist;
group_creation_plist = H5Pcreate(H5P_GROUP_CREATE);
status = H5Pset_link_creation_order(group_creation_plist,
H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED);

然后使用以下方法创建组:

hid_t group_id;
group_id = H5Gcreate(id_file,
"/mydata",
H5P_DEFAULT,
group_creation_plist,
H5P_DEFAULT);

将所有数据添加到新组。要按排序的创建顺序遍历组,您必须使用 H5Literate 函数,确保将 index_type 参数设置为 H5_INDEX_CRT_ORDER

    status = H5Literate (group_id, 
H5_INDEX_CRT_ORDER, // Note this argument
H5_ITER_INC,
NULL,
op_func,
(void *) &od);

从组开始迭代很重要,而不是从根开始。我无法让根组维持链接的创建顺序。解决这个问题的方法就是在根目录下创建一个带有适当标志的组。

使用 H5Literate 有点棘手,特别是如果想要对子组进行递归遍历。找到一个很好的例子heredocumentation .

关于c++ - 按照创建顺序读取/写入 HDF5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22440980/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com