使用 HDF5 C++ api 设置数据集的属性
Posted
技术标签:
【中文标题】使用 HDF5 C++ api 设置数据集的属性【英文标题】:Setting Attributes on Datasets using HDF5 C++ api 【发布时间】:2011-08-24 17:36:50 【问题描述】:我在 HDF5 1.8.7 中使用 HDF5 C++ API,并希望使用 H5::Attribute 实例在 H5::DataSet 实例中设置几个标量属性,但找不到任何示例。使用 C API 非常简单:
/* Value of the scalar attribute */
int point = 1;
/*
* Create scalar attribute for the dataset, my_dataset.
*/
aid2 = H5Screate(H5S_SCALAR);
attr2 = H5Acreate(my_dataset, "Integer attribute", H5T_NATIVE_INT, aid2,H5P_DEFAULT);
/*
* Write scalar attribute to my_dataset.
*/
ret = H5Awrite(attr2, H5T_NATIVE_INT, &point);
/*
* Close attribute dataspace.
*/
ret = H5Sclose(aid2);
/*
* Close attribute.
*/
ret = H5Aclose(attr2);
由于某些奇怪的原因,C++ API 中的 H5::Attribute 和 H5::DataSet 类似乎缺少必要的方法。如果有人能提出使用 C++ API 的具体示例,我将不胜感激。
【问题讨论】:
【参考方案1】:如果你有一个 Dataset 对象 ds...
添加字符串属性...
StrType str_type(0, H5T_VARIABLE);
DataSpace att_space(H5S_SCALAR);
Attribute att = ds.createAttribute( "myAttribute", str_type, att_space );
att.write( str_type, "myString" );
添加一个 int 属性...
IntType int_type(PredType::STD_I32LE);
DataSpace att_space(H5S_SCALAR);
Attribute att = ds.createAttribute(" myAttribute", int_type, att_space );
int data = 77;
att.write( int_type, &data );
【讨论】:
字符串类型确实应该是StrType strtype(PredType::C_S1, H5T_VARIABLE);
createAttribute 方法是为 H5::Object-s 定义的,因此您可以使用相同的习惯用法将属性附加到 H5::Group -s,例如。
@Simon: either way works just fine
我遇到了att.write( str_type, "myString" );
的段错误它与att.write( str_type, std::string("myString"))
一起工作;
@Joma:我也遇到了段错误;你提交错误报告了吗?以上是关于使用 HDF5 C++ api 设置数据集的属性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C++ 库在 HDF5 中找出数据集的 PredType