HDF5创建基本文件
1 #include 2 #include <string> 3 #include "H5Cpp.h" 4 5 using namespace H5; 6 7 const H5std_string FILE_NAME("SDS.h5"); 8 const H5std_string DATASET_NAME("IntArray"); 9 const int NX = 5; 10 const int NY = 6; 11 const int RANK = 2; 12 13 int main(void) 14 { 15 /* 16 * 初始化要写入的数据 17 */ 18 int i, j; 19 int data[NX][NY]; 20 for (j = 0; j < NX; j++) { 21 for (i = 0; i < NY; i++) 22 data[j][i] = i + j; 23 } 24 /* 25 * 0 1 2 3 4 5 26 * 1 2 3 4 5 6 27 * 2 3 4 5 6 7 28 * 3 4 5 6 7 8 29 * 4 5 6 7 8 9 30 */ 31 32 33 try { 34 /* 35 * 关闭错误信息自动打印,便于后面的异常捕获 36 */ 37 Exception::dontPrint(); 38 39 /* 40 * 用默认属性创建一个Hdf5文件 41 * 42 * 函数原型: 43 * H5::H5File::H5File(const H5std_string &name, unsigned int flags, const FileCreatPropList & create_plist = FileCreatPropList::DEFAULT, 44 const FileAccPropList & access_plist = FileAccPropList::DEFAULT) 45 * 46 * flags的取值: 47 * H5F_ACC_TRUNC - 如果文件已经存在,则擦除其中的内容。 48 * H5F_ACC_EXCL - 如果文件已经存在,则创建失败。 49 * H5F_ACC_RDONLY - 以只读的方式打开文件,如果文件不存在,则打开失败。 50 * H5F_ACC_RDWR - 以读写的方式打开文件,如果文件不存在,则打开失败。 51 */ 52 H5File file(FILE_NAME, H5F_ACC_TRUNC); 53 54 /* 55 * 已给定的维度信息创建一个dataspace 56 * 57 * 函数原型: 58 * H5::DataSpace::DataSpace(int rank, const hsize_t * dims, const hsize_t *maxdims = NULL) 59 * 60 * rank:dataspace的维度值 61 * dims:每个维度的大小组成的数组 62 * maxdims:每个维度最大值组成的数组 63 */ 64 hsize_t dimsf[2]; // dataset dimensions 65 dimsf[0] = NX; 66 dimsf[1] = NY; 67 DataSpace dataspace(RANK, dimsf); 68 69 /* 70 * 定义一种数据类型,并以小端字节序排序 71 */ 72 IntType datatype(PredType::NATIVE_INT); 73 datatype.setOrder(H5T_ORDER_LE); 74 75 /* 76 * 用默认属性创建一个DataSet 77 * 78 * 函数原型: 79 * DataSet H5::H5Location::createDataSet(const H5std_string &name, const DataType &data_type, const DataSpace &data_space,
const DSetCreatPropList & create_plist = DSetCreatPropList::DEFAULT, const DSetAccPropList & dapl = DSetAccPropList::DEFAULT, const LinkCreatPropList & lcpl = LinkCreatPropList::DEFAULT) 80 */ 81 DataSet dataset = file.createDataSet(DATASET_NAME, datatype, dataspace); 82 83 /* 84 * 在DataSet中写入数据 85 * 86 * 函数原型: 87 * void H5::DataSet::write(const void * buf, const DataType & mem_type, const DataSpace & mem_space = DataSpace::ALL,
const DataSpace & file_space = DataSpace::ALL, const DSetMemXferPropList & xfer_plist = DSetMemXferPropList::DEFAULT) const 88 */ 89 dataset.write(data, PredType::NATIVE_INT); 90 } 91 catch (FileIException error) { 92 error.printErrorStack(); 93 return -1; 94 } 95 catch (DataSetIException error) { 96 error.printErrorStack(); 97 return -1; 98 } 99 catch (DataSpaceIException error) { 100 error.printErrorStack(); 101 return -1; 102 } 103 catch (DataTypeIException error) { 104 error.printErrorStack(); 105 return -1; 106 } 107 108 return 0; 109 }
生成的h5文件内容: