我使用HDF5文件进行某种"序列化" C ++类数据。有没有办法按照创建它们的相同顺序横向访问每个数据集的HDF5文件?
我之所以选择HDF5,是因为我需要从我的程序外部访问数据,以及能够恢复我的程序状态。
谢谢!
答案 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
有点棘手,特别是如果想要对子组进行递归遍历。找到了一个很好的例子here和documentation。