按照创建的顺序读取/写入HDF5文件

时间:2014-03-16 18:27:54

标签: c++ parallel-processing hdf5

我使用HDF5文件进行某种"序列化" C ++类数据。有没有办法按照创建它们的相同顺序横向访问每个数据集的HDF5文件?

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

谢谢!

1 个答案:

答案 0 :(得分:2)

对我而言,能够以与创建它们相同的顺序遍历组(可能还有其子组)中的数据集就足够了。要实现这一点,(如上面所述的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);

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

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