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文件内容:

posted @ 2021-09-14 13:42  禅元天道  阅读(224)  评论(0编辑  收藏  举报